301 Перенаправляет проблему - URL с? и = - PullRequest
0 голосов
/ 18 июля 2011

Я новичок с 301 перенаправлением через .htacces.

Я могу получить простые перенаправления как

redirect 301 /test.html http://www.domain.com/test2.html 

на работу, но у меня есть некоторые URL, как это

redirect 301 /test.asp?Group=100 http://www.domain.com/test3.html

и по какой-то причине они не работают.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 июля 2011

Вот набор правил для предоставленных вами URL:

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} =group=113 [NC]
RewriteRule ^group\.asp$ http://domain.dk/til-born.htm? [NC,R=301,L]

RewriteCond %{QUERY_STRING} =product=1136 [NC]
RewriteRule ^product\.asp$ http://www.domain.dk/til-born/bukser.html? [NC,R=301,L]
  1. Как вы можете видеть, строка запроса сопоставляется отдельно с именем страницы.Итак ... для каждого из таких перенаправлений вам нужно 2 строки: RewriteCond & RewriteRule.

  2. Приведенное выше правило будет выполнять EXACT match, что означает, что /group.asp?group=113&param=value не будет перенаправлен, поскольку строка запросаgroup=113&param=value, что больше, чем просто group=113.

    Чтобы такой редирект работал (когда в строке запроса есть несколько необязательных параметров), вы должны изменить его: RewriteCond %{QUERY_STRING} (^|&)group=113(&|$) [NC] - это будет соответствовать group=133 где-нибудь в строке запроса (group=113 и group=11366 все еще различны, поэтому здесь нет проблем).

  3. Это необходимо поместить в .htaccess в корневой папке веб-сайта.При размещении в другом месте может потребоваться некоторая настройка.

0 голосов
/ 18 июля 2011

Директива Redirect (насколько я знаю) соответствует только пути, а не строке запроса. Вместо этого используйте RewriteRule. QSA дает указание механизму перезаписи добавить строку запроса в новый перенаправленный URL-адрес.

RewriteEngine On
RewriteRule ^test\.asp http://www.domain.com/test3.html [L,R=301,QSA]
...