Перенаправить URL с помощью параметра Query String в URL - PullRequest
0 голосов
/ 20 декабря 2010

У меня есть несколько URL-адресов со старого сайта, который я недавно обновил до EE2. Эти URL выглядят так:
http://www.example.com/old/path.asp?dir=Folder_Name

Эти URL нужно перенаправить на:
http://www.example.com/new_path/folders/folder_name

Не все Folder_Name строки совпадают с folder_name сегментами URL, поэтому, скорее всего, это будут статические перенаправления.

Я попробовал следующее правило для определенной папки с именем "Example_One", которая отображается на страницу на новом сайте с именем "example1":

Redirect 301 /old/path.asp?dir=Example_One
             http://www.example.com/new_path/folders/example1

Но это не работает. Вместо перенаправления я просто получаю ошибку 404, сообщающую, что http://www.example.com/old/path.asp?dir=Example_One не может быть найден.

EDIT:
Здесь также есть вторичная проблема, которая может или не может быть связана: у меня есть универсальное правило, которое выглядит так:
перенаправление 301 /old/path.asp http://www.example.com/new_path

Используя правило, запросы, подобные первому выше, будут перенаправлены на:
http://www.example.com/new_path?dir=Folder_Namewhich вызывает ошибку 404.

1 Ответ

0 голосов
/ 28 декабря 2010

Нужно было еще немного покопаться в Google, чтобы найти правильный синтаксис для mod_rewrite.

Используя пример сверху:

RewriteCond %{QUERY_STRING} ^dir=Example_One$
RewriteRule ^/old/path\.asp$ /new_path/folders/example1? [R=301,L] 

Это устраняет обе вышеуказанные проблемы - почему EE 404 связывается с одним параметром в строке запроса, эта проблема все еще не решена, но это работает в качестве обходного пути к этой проблеме.

Вы также можете перенаправить URL-адреса на определенную страницу, где параметр может иметь различное значение каждый раз. Одним из примеров этого является отслеживание кампании Google UTM (в таких ситуациях, когда строка запроса отслеживания вызывает 404):

Ссылка: http://www.example.com/?utm_source=xxx&..... (триггеры 404)
Следует перенаправить на: http://www.example.com

RewriteCond %{QUERY_STRING} ^utm_source=
RewriteRule ^$ http://www.example.com? [R=301,L] 

Примечание. Это перенаправит только те запросы на домашнюю страницу, как определено ^ $. Если вы хотите перенаправить запросы utm на другую страницу, вам нужно изменить первую часть этого RewriteRule.

...