.правило htaccess не работает без перенаправления HTTP [R]
Я использую следующий.htaccess с Wordpress для удаления index.php с видимого URL-адреса. Это работает, но вызывает перенаправление http, поэтому URL-адрес изменяется в окне браузера. Если я удалю [R], он больше не будет работать. Почему это должно было произойти?
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [R]
2 answers
Похоже, вы смешиваете Wordpress
себя, который пытается сделать перенаправление, и RewriteRule
, где вам не нужно делать перенаправление : он переписан внутренне до прибытия в Php, таким образом, до прибытия в Wordpress
. Если вы просто прекратите переписывать и добавите флаг QSA
, чтобы всегда сохранять строку запроса, это должно сработать.
Попробуйте сделать это:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [QSA,L]
Если это не сработает, попробуйте сделать следующее:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$1 [QSA,L]
Если это не сработает, попробуйте сделать это:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !(index\.php)
RewriteRule ^(.*)$ /index.php/$1 [QSA,L]
И если этого недостаточно:
Две подсказки:
Если вы не находитесь в размещенной среде (= если это ваш собственный сервер, и вы можете изменять виртуальные хосты, а не только файлы .htaccess
), попробуйте использовать директиву RewriteLog
: это поможет вам отследить такие проблемы:
# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On
Мой любимый инструмент для проверки регулярного выражения:
Http://www.quanetic.com/Regex (не забудьте выбрать ereg(POSIX) вместо preg(PCRE)!)