Mod_rewrite为漂亮的网址

时间:2014-05-09 11:41:19

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

如何在上述情况下完成modrewrite:

让我们说网站是:www.real-estate.com

然后我们有第一个mod重写:

RewriteRule ^([a-zA-Z\-]+) cities.php?city_url=$1

所以这将重写为类似的东西:www.real-estate.com/florida它将列出佛罗里达州的所有房地产。

然后我们添加此规则:

RewriteRule ^([a-zA-Z\-]+)/(.*)+$ details.php?project=$2

这将重写为www.real-estates/florida/project-one,它将显示该项目的详细信息。

但是,如果我像这样访问城市的链接:www.real-estae.com/florida/(斜杠最后)它将跳转到第二个mod重写规则,带我到带有空变量的details.php。

解决这个问题的正确解决办法是什么,这样如果用户在城市之后添加斜杠,它仍然会显示该城市中的项目,而不是显示空变量的详细信息页面?

2 个答案:

答案 0 :(得分:0)

在玩完之后我发现了他的作品,但我不知道这是否是正确的解决方案:

我取而代之:

RewriteRule ^([a-zA-Z\-]+)/+(.*)$ details.php?project=$2
RewriteRule ^([a-zA-Z\-]+) cities.php?city_url=$1

有了这个:

RewriteRule ^([a-zA-Z\-]+)/([a-zA-Z\-]+) details.php?project=$2
RewriteRule ^([a-zA-Z\-]+) cities.php?city_url=$1

所以我已经更换了(。*)$为什么这样做有效,另一种方式我不知道..也许有人可以解释。

答案 1 :(得分:0)

可能它解决了眼前的问题,但是由于使用了错误的正则表达式并且没有使用锚点$,您的规则可能仍然匹配超过要求。

对于您的情况,请使用以下规则:

RewriteEngine On
RewriteBase /

RewriteRule ^[a-zA-Z-]+/([a-zA-Z-]+)/?$ details.php?project=$1 [L,QSA]
RewriteRule ^([a-zA-Z-]+)/? cities.php?city_url=$1 [L,QSA]

Apache mod_rewrite Introduction