.htaccess! -f не работает

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

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, по-видимому, бросает вызов своей собственной логике, может кто-нибудь помочь мне понять это? Кто-нибудь когда-нибудь сталкивался с чем-либо подобным?

Ответ 1

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

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

Ответ 2

Если вы используете 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

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

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

RewriteLog /var/log/rewrite.log
RewriteLogLevel 3

Отладка ваших запросов. Запомните reset это значение, как только вы закончите, иначе вы получите заполненный жесткий диск.