.htaccess mod rewrite - как исключить каталог из правила перезаписи

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

каталоги для исключения: "admin"и " user".

поэтому http-запросы:http://www.domain.com/admin/ не следует передавать в индекс.PHP-файл.

ErrorDocument 404 /index.php?mod=error404

Options  FollowSymLinks
RewriteEngine On
RewriteBase /

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

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

6 ответов


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

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

это завершит процесс перезаписи.


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

RewriteEngine Off

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


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

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

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

RewriteEngine On

RewriteRule ^(wordpress)($|/) - [L]

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

RewriteEngine на
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-адрес. Разум пространства.


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

RewriteEngine on

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

переписчик выше перепишет все запросы на / index.в PHP кроме просьбы о / foo/ .

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

RewriteCond %{REQUEST_FILENAME} !-d

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

RewriteEngine on

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

переписывает все (за исключением directries) к / index.в PHP .