重写具有多个url参数的url

时间:2014-04-21 13:33:02

标签: php apache .htaccess mod-rewrite url-rewriting

一直在研究如何使用htaccess文件重写网址。投入了大量时间后,我仍然对如何重写网址有一个非常模糊的想法。

基本上,我有一个网址:

http://mehthesheep.com/bali/jimbaran/blue-point/1

我想改写为:

http://mehthesheep.com/countries/hotel.php?hotel_id=1&state=bali&city=jimbaran

如何在网址中添加多个参数?

任何有关简单解释的帮助都将不胜感激!

2 个答案:

答案 0 :(得分:2)

所以apache并不是我最强的技能,但据我所知,重写网址的方式是使用mod重写,在你的正则表达式中,每个匹配的参数都可以映射到其他东西。如下所示:

                 #1st field                                           #match 2 
RewriteRule ^/hotel/(.*)/(.*)  http://www.example.com/hotel.php?hotel_id=$2&state=$1 [NC,QSA,L]
                      #2nd field                                               #match 1

我的语法可能有误,所以我道歉,但要点是我可以采取模式,然后将匹配对应于' $ n'我的重写网址中的密钥。在上面的示例中,对/ hotel / bali / 1的调用将重写为hotel.php?hotel_id = 1& state = bali。不确定是否重要,但我使用了一个非常简单的匹配'(。*)'基本上意味着什么。

最后一位是您可以添加的标志,以确保您获得所需的行为。如果您有跟踪或其他参数进入,QSA允许附加查询字符串,NC会使匹配的大小写不敏感,如果他们尝试像/ Hotel这样的事情。 L是最后一个,意思是如果规则匹配,这是要评估的最后一个规则,所以执行重写(或者那个效果)。

希望有所帮助。这真的帮助我深入了解mod重写: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

答案 1 :(得分:0)

将此代码放入DOCUMENT_ROOT/.htaccess文件中:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /countries/hotel.php?hotel_id=$4&state=$1&city=$2 [L,QSA]