modrewrite问题

时间:2011-05-09 13:36:26

标签: apache mod-rewrite

我有一个像以下

这样的地理数据库
id contintent
------------
1  europe
2  usa 

id country
-----------
21 germany
22 france

id  city
-----------
50 paris
51 berlin

让我说我有这个网址: /show.php?contintentID=1&countryID=21&cityID=51

我如何使用modrewrite将其翻译为正确的: /europe/germany/berlin/index.html

我认为这超出了通常的modrewrite .. 有任何想法吗?请帮忙 - 谢谢!

2 个答案:

答案 0 :(得分:1)

为什么它会超出常规modrewrite?如果你确定在数据库中有一个没有特殊字符的正确字段(我总是把这个字段称为pre_field_seo,对于新闻标题,这将是:new_title_seo),我把标题放在没有空格,特殊字符等所以SEO就绪。< / p>

您提供的演示数据非常完美,但请确保您没有München,在这种情况下,正确的seo名称将是munchen或muenchen,无论您最喜欢什么。

只需要一个rewriterul:

RewriteRule /([a-zA-Z]+)/([a-zA-Z]+)/([a-zA-Z]+)/index.html show.php?continentName=$1&countryName=$2&cityName=$3 [L]

当然这也意味着必须转换show.php才能在数据库中找到名称而不是ID。但是,可以使用以下设置添加和使用ID:

/1-europe/21-germany/51-berlin/index.html

在这种情况下,你需要这个重写:

RewriteRule /([0-9]+)-([a-zA-Z]+)/([0-9]+)-([a-zA-Z]+)/([0-9]+)-([a-zA-Z]+)/index.html show.php?continentID=$1&countryID=$3&cityID=$5

答案 1 :(得分:0)

你是对的。 mod_rewrite无法执行此操作,因为它无法访问数据库。

所以你需要编写show.php,以便它在数据库中查找相对的id号,然后使用$continent/$country/$city/index.html构造新的URL并使用http_redirect重定向到它。