.htaccess! -f правило не работает - PullRequest
12 голосов
/ 30 марта 2009

Я годами использовал простые правила mod_rewrite для своей CMS и сейчас делаю новую версию, я вижу, что rewriteCond не имеет смысла - у меня есть стандарт «если это не файл», но я все еще вижу, что rewriterules являются оценивается, хотя они не должны. Мой код перезаписи:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ index.php?page=$1
RewriteRule ^([^/]+)/([^/]+)$ index.php?page=$1&var=$2

Я загружаю / page / var, и он отлично работает как index.php? Page = page & var = var, но я пытаюсь загрузить /css/file.css, и он загружает index.php? Page = css & var = file.css даже хотя /css/file.css - это файл, поэтому весь раздел перезаписи не должен даже оцениваться.

Я никогда не видел, чтобы htaccess бросал вызов своей собственной логике, может кто-нибудь помочь мне понять это? Кто-нибудь сталкивался с чем-нибудь подобным?

Ответы [ 4 ]

26 голосов
/ 30 марта 2009

RewriteCondition s применяется только к следующему правилу. Вы хотите это:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ index.php?page=$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ index.php?page=$1&var=$2
14 голосов
/ 25 сентября 2012

Если вы используете Apache 2.2, вы ДОЛЖНЫ прочитать это:

http://amandine.aupetit.info/135/apache2-mod_rewrite/

Спойлер: на самом деле вам нужно написать:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-l           

Merc.

3 голосов
/ 30 марта 2009

Ну, это должно сработать.

Попробуйте установить следующие реквизиты в вашем .htaccess:

RewriteLog /var/log/rewrite.log
RewriteLogLevel 3

Для отладки ваших запросов. Не забудьте сбросить это значение, как только вы закончите, иначе вы получите заполненный жесткий диск.

1 голос
/ 30 марта 2009

Возможно, использовать RewriteLog и RewriteLogLevel для отладки того, что он делает?

(от http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html)

...