Ответы пользователя по тегу Apache HTTP Server
  • Apache 2.4 mod_rewrite почему не работает проверка на наличие файла?

    @ugodrus Автор вопроса
    В том то и прикол. После первых 2х строк шлю в назначенный php с добавлением подстановок из не срабатывающих правил в query string.. в скрипт приходят живые абсолютные маршруты. Причем -f работает с абсолютными маршрутами но не срабатывает..

    UPDATE

    Ответ на вопрос оказался довольно простым: закрались опечатки точнее кривые символы визуально не очень заметные.
    И может быть давно бы эту проблему решил если бы Apache 2.2 смог мне ее показать в RewriteLog.
    Косяк был замечен после того, как перешел на 2.4 и попытки запустить RewriteLog. Самое весёлое что до этого в логе эти опечатки не упоминались.
    А всё оказалось слишком просто.
    RewriteEngine On
    
    RewriteBase /
    
    # Если нет запрашиваемого файла
    RewriteCond %{REQUEST_FILENAME} !-f
    
    # Если URI к нему соответствует шаблону
    RewriteCond %{REQUEST_URI} ^/([^/]+)/thumb/([^/]+)(/.+)?/(.+)\.(jpe?g|png|gif|svgz?|tiff?)$
    
    # Если представлен файл оригинального изображения и полностью соответствуют имя и расширение
    RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.%5 -f
    
    # Или представлен файл оригинального изображения с таким же именем но с другим расширением
    #RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.jpg  -f [OR]
    #RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.jpeg -f [OR]
    #RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.tif  -f [OR]
    #RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.tiff -f [OR]
    #RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.gif  -f [OR]
    #RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.bmp  -f [OR]
    #RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.png  -f [OR]
    #RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.svg  -f [OR]
    #RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.svgz -f
    
    # А также имеется правило преобразования для миниатюризатора в виде php файла в указанной директории
    RewriteCond %{DOCUMENT_ROOT}/assets/thumbs/thumb.inc/%2.inc.php -f 
    
    RewriteRule ^(.*)$ assets/thumbs/thumb.php [L,QSA]

    Пользуйтесь на здоровьице. И будьте ВНИМАТЕЛЬНЕЕ К МЕЛОЧАМ.
    Ответ написан
    Комментировать
  • Как работает htaccess ZendSkeletonApplication?

    @ugodrus
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
    RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]

    Короче это хитронаворочанная конструкция для запросов типа /directory/application/method собранная для вычисления основной директории запуска.
    В первой строчки сам pattern ^(/директория)(используемый метод)::{ссылка на используемый метод из этого же регулярника} и модификация изначального %{REQUEST_URI} суффиксом.
    Во второй строке ^(/директория) записывается в окружение
    В третьей запрос перенаправляется в /directory/index.php
    Хотя смысла во второй строке не вижу. Более уместно было бы как-то передавать скрипту используемый метод в виде отдельной переменной.
    Я бы проще обошелся:
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
    RewriteRule ^(.*)$ %1index.php [NC,L]

    Хотя (может быть я и не прав) можно сделать так : RewriteCond %{REQUEST_URI}::$2 ^(/.+/)(.+)::\2$
    Ответ написан
    Комментировать
  • Как реализовать переадресацию?

    @ugodrus
    Вообще не совсем понятны манипуляции.
    Прежде чем позориться со своими вариантами почитайте документацию по mod_rewrite раздел переменных среды.
    Это размещаете в корне domain1
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^domain1\.ru
    RewriteCond %{REQUEST_URI} ^/site
    RewriteRule .* http://www.domain2.ru/ [R,L]

    Если вы хотите это использовать для алиасов то тогда добавьте ещё так.
    RewriteCond %{HTTP_HOST} ^www\.domain2\.ru
    RewriteRule ^(.*)$ /site/$1 [L]
    Ответ написан
  • Как правильно заменить изображения?

    @ugodrus
    Вот так.
    Ответ написан
    Комментировать