带有htaccess的Double RewriteRule

时间:2013-03-20 22:27:40

标签: .htaccess mod-rewrite rewrite

我的规则有问题;我把它们放在一起,但只是第一个。

我有2个不同信息的文件。

RewriteRule ^([A-Za-z0-9-]+)/?$ tour.php?tour=$1 [NC,L]
RewriteRule ^([A-Za-z0-9-]+)/?$ programa.php?programa=$1 [NC,L]

1 个答案:

答案 0 :(得分:0)

只有第一个有效,因为您用来匹配的模式完全相同:^([A-Za-z0-9-]+)/?$。您还需要其他东西来分隔 tour.php 以及 programa.php 的内容。现在,如果有人在浏览器的URL地址栏中输入http://youdomain.com/abcdefg/,则会将/abcdefg/ URI发送到您的服务器。第一条规则:

RewriteRule ^([A-Za-z0-9-]+)/?$ tour.php?tour=$1 [NC,L]

匹配,因为/abcdefg/与您的模式^([A-Za-z0-9-]+)/?$匹配,并且会被重写为/tour.php?tour=abcdefg。如果那是为了 programa.php 怎么办?永远不会达到第二条规则,因为所有内容都是由第一条规则的模式捕获的。你需要添加其他东西来区分两者。例如,添加额外的路径注释:

RewriteRule ^tour/([A-Za-z0-9-]+)/?$ tour.php?tour=$1 [NC,L]
RewriteRule ^programa/([A-Za-z0-9-]+)/?$ programa.php?programa=$1 [NC,L]

这意味着如果我转到http://youdomain.com/programa/abcdefg/,我的请求会被重写为/programa.php?programa=abcdefg,如果我转到http://youdomain.com/tour/abcdefg/,我的请求会被重写为/tour.php?tour=abcdefg