RewriteRule для перенаправления с URL, который получил параметры - PullRequest
1 голос
/ 10 февраля 2011

Я пытаюсь использовать RewriteRule Inorder для перенаправления формы x страницы на страницу y.Страница x получила два параметра:

Я пробовал этот>> 1003 *

Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^products.php?product=(.*) $1/ [R=301,L]

только для тестирования, и некоторые похожие коды, такие как> /$1/ вместо $1/, только $1 Я пытался использовать RewriteCond с query_string, но ничего не получалось....

оф, что есть продолжение htaccess>

RewriteRule ^(.*)/$ $1.php [L]

и еще несколько правил, которые не имеют отношения (я думаю)

Можете ли вы помочь мне, пожалуйста?

Спасибо.

РЕДАКТИРОВАТЬ:

После некоторых масштабных поисков я нашел ответ!это ответ:

RewriteCond %{QUERY_STRING} ^product=(.*)$
RewriteRule ^test.php$ %1/? [R=301,L]

теперь для объяснения: во-первых, добавлено условие перезаписи, которое будет соответствовать строке запроса.во-вторых, я удаляю строку запроса из правила перезаписи и $ = the continue (строка запроса).Мне тоже нужно было добавить?(знак вопроса) во второй части rewriterule> %1/? знак вопроса означает, что я не хочу сохранять строку запроса в новом URL.

1 Ответ

3 голосов
/ 10 февраля 2011

Первая часть вашего правила должна содержать регулярное выражение, с которым сервер может сравнивать запрос.Например:

RewriteRule ^([^/]+)/?  index.php?page=$1 [L]

Это займет http://somedomain.fake/somepage/ и перенаправит его на http://somedomain.fake/index.php?page=somepage. Первая часть правила соответствует, вторая часть обрабатывает.Мое правило "([^ /] +)" - это регулярное выражение, которое будет соответствовать чему угодно.Если вы хотите сузить способ работы своего правила, вы можете настроить регулярное выражение для включения или исключения определенных частей строки.

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

.htaccess и mod_rewrite - voodoo, чтобы использовать старую цитату.Обязательно тщательно изучите, прежде чем внедрять подобные вещи на живом сайте.

--------------------- Редактировать:

Обновлено после обсуждения:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^product=([^/]+)$
RewriteRule ^products\.php$ %1.php [L]

ИЛИ

RewriteEngine On
RewriteCond %{QUERY_STRING} ^product=([^/]+)$
RewriteRule ^products\.php$ %1/ [L]
...