.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 это значение, как только вы закончите, иначе вы получите заполненный жесткий диск.
Ответ 4
Возможно, используя RewriteLog
и RewriteLogLevel
, чтобы отладить, что он делает?
(Из http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html)