如果没有传递所有参数,htaccess RewriteRule不会处理

时间:2013-07-09 15:16:57

标签: .htaccess

希望有人可以帮我解决这个问题...

我的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将不起作用。任何想法如何解决这个问题?

提前致谢...

2 个答案:

答案 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

它将跳过第一条规则,它将匹配重定向到部分查询字符串的第二条规则。

希望有所帮助,但您可以制作所需数量rulesconditions。他们来的顺序确实很重要。

答案 1 :(得分:1)

用以下内容替换您的规则:

RewriteRule ^/?find/([^/]+)(?:/in/?([^/]*)/?([^/]*)/?)? /page.html?type=$1&city=$2&state_abbrev=$3 [L,QSA]