2015-06-23 2 views
1

Моего сайта используется для создания URL, например:Перенаправление URL на уровне переменных

/data.php?s=1432862823&type=basic 

Я изменил программу таким образом, новые URL, сгенерированных являются:

/d.php?s=1432862823&t=basic 

Поскольку некоторые люди закладки старых URL-адреса Я хочу написать правило Rewrite, которое приведет их к новому URL-адресу.

Я не это до сих пор:

RewriteEngine on 
RewriteRule "^/data\.php$" "/d.php" 

, но я не могу понять, как учитывать переменные.

+0

Да, используйте переписывание/переадресацию. IIS: https://technet.microsoft.com/en-us/library/cc732969(v=ws.10).aspx Apache: http://httpd.apache.org/docs/2.4/rewrite/remapping.html – chris85

+0

Спасибо, я использую apache и прочитал отправленный вами документ. Из приведенного выше примера должно быть что-то вроде этого: 'code'RewriteEngine on RewriteRule" ^/data \ .php? Member = $ "" /d.php?m= "' code' – Ron

+0

Обновите свой вопрос кодом Мы писали. – chris85

ответ

1

Попробуйте это:

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^s=([^&]+)&type=([^&]+) [NC] 
RewriteRule ^data.php$ /d.php?s=%1&t=%2 [NC,R,L] 

Это внешне перенаправляет запрос на:

/data.php?s=foo&type=bar 

в

/d.php?s=foo&t=bar 
+1

Отлично! Большое спасибо, это сработало, как прелесть. Только одно небольшое изменение, которое я заметил, я должен был сделать. Переменная типа имеет два значения: «basic» или «pro». Я изменил базовый вариант на b и pro на p. Пожалуйста, не могли бы вы рассказать мне, как включить это в переписывание. так другими словами /data.php?s=1432862823&type=basic должен стать /d.php?s=1432862823&t=b – Ron

1

Edit: Я извиняюсь, я только заметил теперь, вы изменили параметр type на t. Таким образом, это решение не будет соответствовать вашим потребностям, если только для URI, где параметры строки запроса не изменяются. Я оставляю этот ответ здесь, чтобы другие могли узнать из него - вы будете удивлены, как многие люди не знают, что строка запроса автоматически переносится в новое место назначения. Поэтому ответ Старкина является правильным ответом.


Вы можете последовать решение Starkeen, которая специально проверяет строку запроса и явно добавляет его в d.php. Кроме того, для простоты, вы могли бы просто использовать это:

RewriteEngine on 
RewriteRule ^data.php$ /d.php [R=302,L] 

Строка запроса будет автоматически переведен из data.php в d.php, и вы будете перенаправлены соответствующим образом.

Чтобы сделать перенаправление перманентным и кэшированным браузерами и поисковыми системами, измените 302 на 301.

Смежные вопросы