Как использовать rewriterules в .htaccess для изменения URL? - PullRequest
1 голос
/ 14 октября 2011

Я использую это rewriterule:

RewriteRule ^page/([^/]*)$ http://example.com/page?q=$1 [QSA,L]

Если я перейду на example.com/page/somePage, меня перенаправят на example.com/page?q=somePage

Но я не хочу перенаправления, я хочу, чтобы URL всегда был example.com/page/somePage

Как это сделать?
Спасибо


Я удалил http://example.com но это не работает, я получаю страницу не найдена.


Я использую Wordpress для своего сайта, это мой полный .htaccess:


    RewriteEngine On
RewriteBase /
RewriteRule ^page/([^/]+)/?$ page?q=$1 [L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

1 Ответ

1 голос
/ 14 октября 2011

Всякий раз, когда вы указываете http:// в начале пути для перезаписи, Apache будет всегда принудительно перенаправлять 301 на новый URL, независимо от того, находится ли URL на том же веб-сайте или нет.Простое удаление части http://example.com должно решить вашу проблему.


Что касается страницы, которая не найдена, есть ли где-то еще один RewriteRule, который сообщает, что просто «страница» должна быть обработана как «page.php» или что-то в этом роде?из рода?У вас есть файлы PHP, сохраненные без расширений?


Итак, ваша проблема в том, что вам определенно нужно убрать флаг [L], потому что вы говорите Apache не обрабатывать больше RewriteRules для этого запроса,поэтому он никогда не смотрит на переписывание WordPress, потому что это правило уже выполнено, и Apache сказали, что это должно быть окончательное правило.Я бы порекомендовал оставить [QSA] в строке, однако это не повлияет на общий результат вашего сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...