htaccess和GET的子页面

时间:2012-05-16 19:14:25

标签: .htaccess mod-rewrite url-rewriting rewrite

我正在尝试排序将htaccess中的值传递给php:

我有点像:

RewriteRule ^ pubs $ pubs.php RewriteRule ^ pubs / beer $ pubs.php?sort = beer

以上代码工作正常。现在我试图为子页面(城市)做同样的事情:

RewriteRule ^pubs/(.*)$ district.php?name=$1
RewriteRule ^pubs/(.*)/beer$ district.php?name=$1&sort=beer

链接看起来像:
www.domain.com/pubs/beer - 工作正常
www.domain.com/pubs/new-york/beer - 不工作

我做错了什么?如果我删除行 RewriteRule ^ pubs /(.*)$ district.php?name = $ 1 ,则链接www.domain.com/pubs/new-york/beer正在运行。我花了几个小时找到没有运气的解决方案。我将不胜感激。

1 个答案:

答案 0 :(得分:1)

  

如果我删除行RewriteRule ^ pubs /(.*)$ district.php?name = $ 1那么   链接www.domain.com/pubs/new-york/beer正在运作。

因为www.domain.com/pubs/new-york/beer匹配

RewriteRule ^pubs/(.*)$ district.php?name=$1

导致zone.php?name = newyork / beer而不是匹配

RewriteRule ^pubs/(.*)/beer$ district.php?name=$1&sort=beer

你可以解决这个问题的一种方法是:

RewriteRule ^pubs/([^/]*)$ district.php?name=$1

因此,如果在您的城市之后的任何地方有一个额外的斜线,则该规则将被忽略并继续执行第二个规则...只需确保将其放在

之后
RewriteRule ^pubs/beer$ pubs.php?sort=beer

或者它会匹配啤酒,就好像它是像city.php这样的城市名称?name = beer