一直在研究如何使用htaccess文件重写网址。投入了大量时间后,我仍然对如何重写网址有一个非常模糊的想法。
基本上,我有一个网址:
http://mehthesheep.com/bali/jimbaran/blue-point/1
我想改写为:
http://mehthesheep.com/countries/hotel.php?hotel_id=1&state=bali&city=jimbaran
如何在网址中添加多个参数?
任何有关简单解释的帮助都将不胜感激!
答案 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]