.htaccess mod_rewrite - как исключить каталог из правила перезаписи
У меня есть 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 ответов
Попробуйте это правило перед вашими другими правилами:
RewriteRule ^(admin|user)($|/) - [L]
Это завершит процесс переписывания.
Что вы также можете сделать, это положить.htaccess файл, содержащий
RewriteEngine Off
В папках, которые вы хотите исключить из перезаписи (по правилам в файле.htaccess, который находится выше в дереве). Простой, но эффективный.
Добавьте условие для проверки каталога администратора, например:
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]
Если вы хотите удалить конкретный каталог из правила (то есть вы хотите удалить каталог 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.
Мы использовали следующее правило 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. Следите за пробелами.