.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]
мы использовали следующее правило 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 .