.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. Следите за пробелами.

RewriteEngine On

RewriteRule ^(wordpress)($|/) - [L]
Другие вопросы по тегам