我正在尝试制作两个应该指向不同文件的重写规则。但是,它们以某种方式指向同一个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
答案 0 :(得分:0)
在us
和united-state
之间以及united-state
和california
之间使用其他分隔符。你无法检测www.example.com/destination/us-united-state
中的三个单独的单词是否实际上是两个或三个'事物'。我建议使用斜杠作为分隔符:www.example.com/destination/us/united-state
和www.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