#apache #mod-rewrite
#apache #мод-перезапись
Вопрос:
Мне нужно переписать следующие типы URL-адресов:
http://www.gocruise.co.uk/fusion/detailline3.pl?lineid=13amp;sid=6924amp;ccid=Fred Olsen
в:
http://www.gocruise.co.uk/fred-olsen
используя Apache RewriteRule. Я пытался разобраться с этими правками как можно быстрее, но у меня закончилось время. Любая помощь будет высоко оценена.
(основная проблема, с которой я сталкиваюсь, заключается в том, как управлять несколькими параметрами)
Комментарии:
1. Вы предполагаете, что затем захотите перенаправить
...amp;ccid=John-Smith
на/john-smith
? Кроме того, каковы ваши намерения с остальными параметрами? Добавить их к перенаправленному URL-/fred-olson?lineid=13amp;sid=6924
?2. Да, это то, что я предлагаю, и пока передаются другие параметры, они могут исчезнуть (если это возможно)
Ответ №1:
Вероятно, вы хотите, чтобы было наоборот: приходит запрос /fred-olsen
, и вы хотите перенаправить пользователя на более длинный URL. Это довольно просто:
# in the Server Configuration or VHost Configuration:
RewriteRule ^/fred-olsen$ /fusion/detailline3.pl?lineid=13amp;sid=6924amp;ccid=Fred Olsen [R=301,L]
или:
# in the .htaccess file of the DocumentRoot
RewriteRule ^fred-olsen$ fusion/detailline3.pl?lineid=13amp;sid=6924amp;ccid=Fred Olsen [R=301,L]
Ответ №2:
Если lineid и sid не будут всегда иметь одинаковые значения или они не важны для кода, я не думаю, что это сработает. Обычно перезапись URL включает все параметры, так что в итоге получается что-то вроде http://www.gocruise.co.uk/13/6924/fred-olsen
Ответ №3:
Хорошо, следующие правила должны выполнять то, что вы просите. Два других параметра будут отправлены в строке запроса. Единственным другим способом было бы добавить их в URL, который, похоже, не является тем, что вы хотите.
# http://www.gocruise.co.uk/fusion/detailline3.pl?lineid=13amp;sid=6924amp;ccid=Fred Olsen
# redirects to ->
# http://www.gocruise.co.uk/Fred-Olsen?lineid=13amp;sid=6924
RewriteEngine On
RewriteCond %{REQUEST_URI} /fusion/detailline3.pl
RewriteCond %{QUERY_STRING} (.*)amp;ccid=(w*) (w*)$
RewriteRule (.*) /%2-%3?%1 [L,R=301]