.htaccess mod_rewrite - как исключить каталог из правила перезаписи - PullRequest
132 голосов
/ 04 декабря 2009

У меня есть 8 строк правил перезаписи в моем файле .htaccess. Мне нужно исключить две физические директории на моем сервере из этих правил, чтобы они могли стать доступными. На данный момент все запросы отправляются в файл index.php.

Каталоги для исключения: «админ» и «пользователь».

Таким образом, запросы http: http://www.domain.com/admin/ не должны передаваться в файл index.php.

ErrorDocument 404 /index.php?mod=error404

Options  FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

RewriteRule ^([^/] )/([^/] )\.html$ index.php?lang=$1&mod=$2 [L]
RewriteRule ^([^/] )/$ index.php?lang=$1&mod=home [L]

Ответы [ 6 ]

265 голосов
/ 04 декабря 2009

Попробуйте это правило перед другими вашими правилами:

RewriteRule ^(admin|user)($|/) - [L]

Это завершит процесс переписывания.

98 голосов
/ 12 июля 2013

Что вы также можете сделать, это поместить файл .htaccess, содержащий

RewriteEngine Off

В папках, которые вы хотите исключить из перезаписи (по правилам в файле .htaccess, который находится выше в дереве). Просто, но эффективно.

22 голосов
/ 04 декабря 2009

добавить условие для проверки каталога администратора, например:

RewriteCond %{REQUEST_URI} !^/?(admin|user)/
RewriteRule ^([^/] )/([^/] )\.html$ index.php?lang=$1&mod=$2 [L]

RewriteCond %{REQUEST_URI} !^/?(admin|user)/
RewriteRule ^([^/] )/$ index.php?lang=$1&mod=home [L]
4 голосов
/ 20 сентября 2014

Мы использовали следующее правило mod_rewrite:

ПереписатьEngine на
RewriteCond% {REQUEST_URI}! ^ / Test /
RewriteCond% {REQUEST_URI}! ^ / My-folder /
RewriteRule (. *) http://www.newdomain.com/$1 [R = 301, L]

Это перенаправляет (постоянно с перенаправлением 301) весь трафик на сайт на http://www.newdomain.com,, кроме запросов к ресурсам в каталогах / test и / my-folder. Мы переводим пользователя в точный ресурс, который он запрашивал, используя группу захвата (. *), А затем добавляя $ 1 в новый URL. Следите за пробелами.

4 голосов
/ 27 апреля 2014
RewriteEngine On

RewriteRule ^(wordpress)($|/) - [L]
3 голосов
/ 05 ноября 2016

Если вы хотите удалить конкретный каталог из правила (то есть вы хотите удалить каталог foo ), вы можете использовать:

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/foo/$
RewriteRule !index\.php$ /index.php [L]

Приведенное выше rewriteRule перезапишет все запросы в / index.php , исключая запросы для / foo / .

Чтобы исключить все существующие директории, вам нужно использовать следующее условие над правилом:

RewriteCond %{REQUEST_FILENAME} !-d

следующее правило

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !index\.php$ /index.php [L]

переписывает все (кроме директорий) в / index.php .

...