Как сделать 301-перенаправление (с .htaccess) конкретных страниц с помощью "?" в их URL? - PullRequest
0 голосов
/ 21 сентября 2011

Как сделать 301-перенаправление определенных страниц с помощью "?" в их URL?

Пример: http://domain.com/cat/?id=1 ---> http://domain.com/catalog/180/

У меня есть куча таких URL. Идентификаторы старых и новых URL не совпадают !!!

.htaccess:

<IfModule mod_alias.c>
Redirect 301 /cat/?id=1 http://domain.com/catalog/180/
</IfModule>

Проблема возникает из-за "?" в URL.

1 Ответ

1 голос
/ 21 сентября 2011

У вас есть для использования mod_rewrite (он должен быть установлен и включен) как вы не можете сопоставить строку запроса с использованием директив Redirect, к сожалению - mod_rewriteявляется единственным известным мне выбором (если вы не готовы сделать это в своем коде PHP / ASP / etc).

# enable rewrite engine
Options +FollowSymLinks
RewriteEngine On

# the actual rule
RewriteCond %{QUERY_STRING} ^id=1$
RewriteRule ^cat/$ http://domain.com/catalog/180/? [R=301,L]

? в конце нового URL используется для отмены текущего запросастрока.Без него новый URL будет выглядеть как http://domain.com/catalog/180/?id=1, а вы этого не хотите.

Приведенное выше правило предназначено для размещения в .htaccess в корневой папке веб-сайта (если он размещен в другом месте, может потребоваться небольшая настройка).) и будет соответствовать /cat/?id=1 ТОЛЬКО.


Если вы хотите сопоставить этот URL с немного другой строкой запроса (например, присутствует дополнительный параметр - например, некоторая информация отслеживания / реферала: /cat/?id=1&source=sidebanner), используйте это правило:

RewriteCond %{QUERY_STRING} (^|&)id=1(&|$)
RewriteRule ^cat/$ http://domain.com/catalog/180/? [R=301,L]

Такой дополнительный параметр строки запроса source=sidebanner будет отброшен во время перенаправления (из-за ? - см. оригинальное объяснение выше).

...