RewriteRule返回到同一目录

时间:2013-08-09 05:50:33

标签: apache .htaccess mod-rewrite

我正在尝试制作两个应该指向不同文件的重写规则。但是,它们以某种方式指向同一个PHP文件。

有人可以帮忙看一下吗?


RewriteRule ^destinations/([a-z]+)-(.*)$ /a.php?x=$1&y=$2 [NC]

这应与www.example.com/destination/us-united-state

相关联
RewriteRule ^destinations/([a-z]+)-(.+)-(.+)$ /b.php?a=$1&b=$2&c=$3 [NC]

这应与www.example.com/destination/us-united-state-california

相关联

2 个答案:

答案 0 :(得分:0)

usunited-state之间以及united-statecalifornia之间使用其他分隔符。你无法检测www.example.com/destination/us-united-state中的三个单独的单词是否实际上是两个或三个'事物'。我建议使用斜杠作为分隔符:www.example.com/destination/us/united-statewww.example.com/destination/us/united-state/california

您的规则是:

RewriteRule ^destinations/([a-z]+)/([^/]+)/?$ /a.php?x=$1&y=$2 [NC]
RewriteRule ^destinations/([a-z]+)/([^/]+)/([^/]+)/?$ /b.php?a=$1&b=$2&c=$3 [NC]

这使用[^/]+,它匹配/字符以外的任何内容。这可以防止捕获组匹配us/united-states之类的匹配us的内容。请注意,此代码未经测试,因为我无法在此计算机上进行测试。

答案 1 :(得分:0)

正则表达式找到最长的匹配项。因此,([a-z]+)-(.*)$将匹配一个或多个a到z字符,后跟一个破折号,然后是ANYTHING。

([a-z]+)-(.+)-(.+)需要两个破折号,但上面的表达式也会匹配这些破折号。

确保您拥有正确数量的破折号:

RewriteRule ^destinations/([a-z]+)-([^-]+)$ /a.php?x=$1&y=$2 [NC]

并将页面重命名为

www.example.com/destination/us-unitedstate

然后

RewriteRule ^destinations/([a-z]+)-([^-]+)-([^-]+)$ /b.php?a=$1&b=$2&c=$3 [NC]

匹配

等网页
www.example.com/destination/us-unitedstate-california