URL-адрес Переписать полное перенаправление с исключениями каталога

У меня есть веб-сайт, который использует общее правило mod_rewrite для отправки всех запросов на страницу index.php, за исключением определенных расширений файлов:

RewriteRule !\.(js|ico|gif|jpg|JPG|png|css|php|phtml|pdf|txt|xml)$ index.php

Что мне нужно сделать, так это исключить определенный каталог (включая любые файлы или подкаталоги, содержащиеся внутри) из этого правила - какое лучшее решение?

Вот мой полный файл .htaccess на случай, если что-то внутри него мешает:

RewriteEngine ON
RewriteCond %{HTTP_HOST} !^www\..*
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{HTTP_HOST} ^([^.]*)\.(co\.uk)
RewriteRule ^.*$     http://www.%1.%2%{REQUEST_URI} [R=permanent,L]

AddHandler application/x-httpd-php .phtml

RewriteRule !\.(js|ico|gif|jpg|JPG|png|css|php|phtml|pdf|txt|xml)$ index.phtml

php_value display_errors "On"

person BrynJ    schedule 01.12.2008    source источник


Ответы (2)


Перед строкой, которую вы указали, например, для каталога с именем «стиль», вам нужно:

RewriteRule  ^style/  -  [L]

Дефис означает «без перенаправления», а «[L]» означает «последнее правило», например, не пытаться сопоставить URL со следующими правилами. Вы можете вставить столько строк, сколько хотите, но они должны быть перед строкой, которую вы указываете в вопросе.

person jTresidder    schedule 01.12.2008
comment
Будет ли это работать для всех файлов и подпапок? Я попробовал это решение, но хотя перенаправление для моего каталога обходится, в нем нет доступных файлов? - person BrynJ; 02.12.2008
comment
Да, я прямо сейчас запускаю именно эту строку (она была вырезана и вставлена) на своих сайтах, и все в каталогах доступно. - person jTresidder; 02.12.2008
comment
Я попробовал это снова, и через Firefox я установил, что имеет место цикл перенаправления - это установка WordPress, и я думаю, что это сбивает с толку, поскольку включает в себя собственную магию перенаправления. Есть ли другое правило, которое может потребоваться, чтобы заставить его играть в мяч? - person BrynJ; 02.12.2008
comment
Только что нашел решение — URL-адреса, определенные в WordPress, были mysite.co.uk/blog — поэтому бесконечные цикл прыгал между www и без www. Поменяли и все хорошо - спасибо! - person BrynJ; 02.12.2008
comment
Ничего страшного, рад, что разобрались :) - person jTresidder; 03.12.2008

Вы можете проверить с помощью RewriteCond %{REQUEST_FILENAME} !-f любой запрос, который не соответствует существующему имени файла.

person stesch    schedule 01.12.2008
comment
Я полностью уверен, что понимаю ваш ответ - я попробовал ваше предложение, и снова оно не дало эффекта. У меня есть каталог с именем blog, к которому мне нужно получить доступ в обычном режиме, поэтому при посещении mysite.com/blog должен отображаться содержащийся в нем index.php, но в данный момент он все еще перенаправляется. - person BrynJ; 02.12.2008
comment
Я имел в виду, что не совсем уверен! Кстати, спасибо за помощь. - person BrynJ; 02.12.2008
comment
Это условие проверяется до фактической перезаписи. Похоже, есть файл, который будет соответствовать. И вы хотите, чтобы все URL-адреса существующих изображений и стилей оставались прежними, без перезаписи. - person stesch; 03.12.2008