希望有人可以帮我解决这个问题...
我的htaccess文件中设置了一个RewriteRule,看起来像这样
RewriteRule ^/?find/(.+)/?in/(.+)/(.+)/ /page.html?&type=$1&city=$2&state_abbrev=$3 [L,QSA]
如果我的网址包含指定的所有参数,例如:http://www.site.com/find/doctors/in/dallas/tx/
,则重写可以正常工作问题是,即使缺少其中一个参数,我也希望这个重写工作。例如,如果我只输入http://www.site.com/find/doctors/,我仍然希望它重定向到'page.html',而不是完成参数。因此,在这种情况下,它将写入http://www.site.com/page.html?type=doctors&city=&state_abbrev=。目前,如果我输入的URL中没有所有参数,则RewriteRule将不起作用。任何想法如何解决这个问题?
提前致谢...
答案 0 :(得分:1)
没有什么可以阻止你进行多次重写。在我的.htaccess中我有许多不同的东西,很多时候你必须这样做。没有一个重写适用于所有场合。
你可以试试这个。
RewriteEngine on
RewriteRule ^find/(.*)/in/(.*)/(.*) page.html?type=$1&city=$2&state_abbrev=$3&%{QUERY_STRING} [L]
RewriteRule ^find/(.*) page.html?type=$1&%{QUERY_STRING} [L]
首先会查找完整的网址
http://www.site.com/find/doctors/in/dallas/tx
然后将其转发到第一个重写规则。
但是如果你使用了这个
http://www.site.com/find/doctors
它将跳过第一条规则,它将匹配重定向到部分查询字符串的第二条规则。
希望有所帮助,但您可以制作所需数量rules
或conditions
。他们来的顺序确实很重要。
答案 1 :(得分:1)
用以下内容替换您的规则:
RewriteRule ^/?find/([^/]+)(?:/in/?([^/]*)/?([^/]*)/?)? /page.html?type=$1&city=$2&state_abbrev=$3 [L,QSA]