htaccess RewriteCond, несколько условий для RewriteRule - PullRequest
2 голосов
/ 24 октября 2011

Я использую .htaccess Mod Rewrite для отправки URL-адреса в index.php, который затем анализирует URL-адрес и создает каждую страницу моего веб-сайта. Это прекрасно работает, что позволяет мне легко управлять чистыми URL-адресами, используя PHP вместо .htaccess.

Пример: http://domain.com/some/url/here/ -> идет в index.php, который загружает страницу с несколькими PHP-файлами вместе взятыми

Однако я пытаюсь разрешить загрузку определенных файлов PHP как обычных файлов PHP (без отправки URL-адреса на index.php для анализа).

Пример: http://domain.com/some/url/here/ по-прежнему работает, как указано выше. http://domain.com/specialexception.php будет загружаться как обычный php-файл без отправки в index.php

У меня есть следующий код:

<IfModule mod_rewrite.c>

    RewriteEngine On

    RewriteCond $1 !^specialexception\.php$ [NC]
    RewriteRule !\.(css|gif|jpg|png|ico|txt|xml|js|pdf|htm|zip)$ /path/to/index.php [NC,L]

</IfModule>

Однако строка RewriteCond сейчас просто игнорируется.

Буду признателен за любую помощь / идеи!

Спасибо.

Ответы [ 2 ]

2 голосов
/ 25 октября 2011
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !(specialexception)\.php$
    RewriteCond %{REQUEST_URI} !(anotherexception)\.php$
    RewriteRule !\.(css|gif|jpg|png|ico|txt|xml|js|pdf|htm|zip)$ index.php [NC,L]
</IfModule>

это прекрасно работает для меня.Если ваш .htaccess находится в той же директории, что и index.php, не используйте путь из webroot.Вместо этого используйте путь относительно вашего .htaccess-файла.

2 голосов
/ 25 октября 2011

Я понял это, хотя я не уверен, почему это работает:

Я изменил правила, чтобы они происходили в обратном порядке. Код, который работает следующим образом:

RewriteCond %{REQUEST_URI} !\.(css|gif|jpg|png|ico|txt|xml|js|pdf|htm|zip)$
RewriteRule !(specialexception)+\.php)$ /path/to/index.php [NC,L]

Проблема с этим решением: Поскольку "specialexception.php" указан в качестве последнего правила, в фактической строке RewriteRule он решает проблему только для ОДНОГО исключения файла.

Один грязный способ обойти это может заключаться в использовании канала в последней строке регулярного выражения:

RewriteCond %{REQUEST_URI} !\.(css|gif|jpg|png|ico|txt|xml|js|pdf|htm|zip)$
RewriteRule !(specialexception|anotherexception|foo|bar)+\.php)$ /path/to/index.php [NC,L]

Если у кого-то есть идея, как добавить несколько исключений для нескольких файлов, я бы хотел знать!

...