这是我的htaccess的一部分:
RewriteRule ^post/(.*)$ post.php?name=$1
RewriteRule ^(.*)/$ cat.php?name=$1
URI将是这样的:
www.domain.com/category-name/
www.domain.com/post/hello-world
如你所见,在第一个地址(类别)的末尾有一个'/',而在第二个地址没有'/',我怎么能在第二个地址呢?如果我会做这样的事情:
RewriteRule ^post/(.*)/$ post.php?name=$1
它不起作用,因为服务器'认为'我的意思是类别地址。 希望你理解,谢谢你。
答案 0 :(得分:3)
在每个规则上使用[L]
修饰符,以便在规则匹配时停止处理更多规则。在这种情况下,您甚至可以选择尾随斜杠!
RewriteRule ^post/(.*)$ post.php?name=$1 [L]
RewriteRule ^(.*)/?$ cat.php?name=$1 [L]
答案 1 :(得分:0)
尝试使用(.*?)
代替(.*)
。
如果没有问号,那就是“贪婪”,因为它会匹配到线上最后一场比赛的所有内容。使用问号,它只会匹配该行的第一个匹配。
答案 2 :(得分:0)
使斜线可选(两次):
RewriteRule ^post/(.*?)/?$ post.php?name=$1 [L]
RewriteRule ^(.*?)/?$ cat.php?name=$1 [L]