Как я могу использовать mod_rewrite только в текущем каталоге? - PullRequest
1 голос
/ 15 июля 2011

В настоящее время у меня есть следующие правила в моем файле .htaccess:

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteRule ^(.*).css style.php?u=$1 [QSA]
        RewriteRule ^(.*).xml rss.php?u=$1 [QSA]
</IfModule>

Это перезапишет следующие URL:

 http://domain.com/user.css
 http://domain.com/user.xml

Но когда я пытаюсь получить файл из подкаталога: http://domain.com/css/style.css он также переписывается.

Моя цель - переписать только для текущего каталога и избежать подкаталогов, так как все реальные файлы CSS в подкаталогах будут перезаписаны.

Как мне этого избежать?

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

Вам нужно сделать свой шаблон более ограничительным: этот ^(.*).css будет НИЧЕГО совпадать с .css, тогда как этот шаблон ^([^/]+)\.css$ будет ограничен something.css (styles\something.css не будет соответствовать ему).

<IfModule mod_rewrite.c>
        RewriteEngine On

        # do not do anything to real files or folders
        RewriteCond %{REQUEST_FILENAME} -f [OR]
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule .+ - [L]

        RewriteRule ^([^/]+)\.css$ style.php?u=$1 [QSA,L]
        RewriteRule ^([^/]+)\.xml$ rss.php?u=$1 [QSA,L]
</IfModule>
0 голосов
/ 15 июля 2011

Самый простой способ - указать mod_rewrite избегать перезаписи, если файл является реальным файлом:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*).css           style.php?u=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*).xml           rss.php?u=$1 [L,QSA]

Я добавил тег [L] (конец), потому что после применения правила вам, конечно, не нужно проверять следующее правило.

Теперь, если файлы действительно существуют, но вы действительно хотите обработать их с помощью скрипта php, если в URL нет подкаталога 'css' ... давайте попробуем это:

<Location "/css">
    RewriteEngine off
</Location>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...