我有一个像以下
这样的地理数据库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 .. 有任何想法吗?请帮忙 - 谢谢!
答案 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重定向到它。