.правило 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] 
Author: Olivier Pons, 2012-01-12

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)!)

 1
Author: Olivier Pons, 2012-01-14 08:22:58

Похоже, я забыл одну важную вещь. Я пропустил тот факт, что строку запроса необходимо было отправить в переменную get q.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
 1
Author: , 2012-01-17 22:00:31