Apache重写多参数

时间:2011-04-12 16:14:57

标签: apache mod-rewrite

我需要重写以下类型的网址:

http://www.gocruise.co.uk/fusion/detailline3.pl?lineid=13&sid=6924&ccid=Fred+Olsen

成:

http://www.gocruise.co.uk/fred-olsen

使用Apache RewriteRule。我一直试图尽可能快地掌握这些重写,但已经没时间了。任何帮助将不胜感激。

(我正在努力解决的主要问题是如何管理多个参数)

3 个答案:

答案 0 :(得分:0)

除非lineid和sid总是具有相同的值,否则它们对代码并不重要,我认为它不会起作用。通常,网址重写包含所有参数,因此您最终会得到类似http://www.gocruise.co.uk/13/6924/fred-olsen

的内容

答案 1 :(得分:0)

你可能反过来想要它:/fred-olsen的请求进来,你想要将用户重定向到更长的URL。这很简单:

# in the Server Configuration or VHost Configuration:
RewriteRule ^/fred-olsen$ /fusion/detailline3.pl?lineid=13&sid=6924&ccid=Fred+Olsen [R=301,L]

或:

# in the .htaccess file of the DocumentRoot
RewriteRule ^fred-olsen$ fusion/detailline3.pl?lineid=13&sid=6924&ccid=Fred+Olsen [R=301,L]

答案 2 :(得分:0)

好吧,以下规则应该按照您的要求进行。其他两个参数将在查询字符串中发送。唯一的另一种方法是将它们添加到URL中,这似乎不是你想要的。

# http://www.gocruise.co.uk/fusion/detailline3.pl?lineid=13&sid=6924&ccid=Fred+Olsen
# redirects to ->
# http://www.gocruise.co.uk/Fred-Olsen?lineid=13&sid=6924

RewriteEngine On

RewriteCond %{REQUEST_URI} /fusion/detailline3.pl
RewriteCond %{QUERY_STRING} (.*)&ccid=(\w*)\+(\w*)$
RewriteRule (.*) /%2-%3?%1 [L,R=301]