Перезапись Apache с несколькими параметрами

#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]