2013-07-09 32 views
1

希望有人可以帮我这个问题...htaccess的重写规则不处理

我有一个重写规则在我htaccess文件设置看起来像这样

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

的重写工作正常,如果我有一个URL包含所有参数指定例如: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

等参数?应该/找到// //中的TX /重定向到page.html中类型=城市= state_abbrev = TX? –

回答

1

这个替换您的规则:

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

工作就像一个魅力 - 谢谢你! –

+0

不错的@anubhava –

+0

不客气@Pjack。很高兴知道它为OP做好了准备。 – anubhava

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] 

它首先会查找完整的URL

http://www.site.com/find/doctors/in/dallas/tx 

然后前进到第一个重写规则。

不过,如果你使用这个

http://www.site.com/find/doctors 

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

希望帮助,但你可以尽可能多的rulesconditions你想要的。而他们来的顺序确实是的事。

+0

感谢您的详细回复 - 非常有帮助! –

+0

没问题,很高兴你有一个工作解决方案。如果它是有用的,你可以始终保持乐观。 –

+0

对不起,忘了:)现在所有设置,再次感谢 –