как использовать htaccess redirectmatch с query_string? - PullRequest
2 голосов
/ 06 апреля 2010

я пытаюсь перенаправить "search.php?q=somethinghere" на "search/somethinghere/", но я не могу этого сделать! Я пытаюсь отправить форму "<form action="search/" method="get" name="search">", но URL-адрес переходит на "search/?q=somethinghere"

RedirectMatch 301 ^/search.php?q=(.*)$ http://domain.com/search/$1/ это тоже не работает. в чем проблема?

Я не хочу "? Q =" в URL.

Ответы [ 3 ]

4 голосов
/ 06 апреля 2010

Если у вас нет опечатки выше, проблема в том, что вы пытаетесь перенаправить:

^/search.php?q=(.*)$

, но вы получаете URL-адрес:

search/?q=somethinghere

(разницаэто .php в вашем правиле перенаправления)

Вы можете попробовать использовать следующее правило перенаправления:

RedirectMatch 301 ^/search?q=(.*)$ http://domain.com/search/$1/
0 голосов
/ 06 апреля 2010

Всякий раз, когда у меня возникают вопросы .htaccess, я всегда сначала заглядываю на этот сайт: http://corz.org/serv/tricks/htaccess2.php#cooldenial

На сайте приведено много примеров и объяснений для различных действий с файлами .htaccess. Согласно этому сайту вы можете попробовать что-то вроде:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^search/([^/]+) http://domain.com/search.php?q=$1 [NC]

Однако я не гуру .htaccess, поэтому вам, возможно, придется поиграться с ним.

0 голосов
/ 06 апреля 2010

Было бы намного чище и быстрее сделать это на стороне клиента. Пусть Javascript создаст URL-адрес search/query при отправке формы - это сэкономит вам дополнительный запрос.

Однако, чтобы сделать это через перенаправления на стороне сервера, вы можете использовать mod_rewrite с RewriteCond и QUERY_STRING в качестве источника:

RewriteCond %{QUERY_STRING}  \bq=([^&]*)$
RewriteRule ^search.php$ /search/%1 [R=301]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...