URL 重写 - 名称到数字 (Apache)

Posted

技术标签:

【中文标题】URL 重写 - 名称到数字 (Apache)【英文标题】:URL Rewriting - Names to numbers (Apache) 【发布时间】:2012-06-24 05:55:47 【问题描述】:

是否可以进行 URL 重写,其中像 http://www.myurl.com/usa/california/sanjose 这样的 URL 重定向到 http://www.myurl.com/c=1&st=3&area=14

这里的问题是,一直以来我们都使用像http://www.myurl.com/c=1&st=3&area=14 这样的网址,所有地区州和国家都由数据库中的数字表示。所以在上面的例子中,如果 usa/california/sanjose 重定向到 c=1&st=3&area=14,如果用户键入 usa/florida/tallahassee,他将不得不重定向到 c=1&st=5&area=3。数字因国家、州和城市而异。

URL重写可以根据名称自动将名称更改为数字,还是我们必须更新数据库并将所有数字更改为名称,以便php文件可以根据名称而不是数字来绘制数据。

【问题讨论】:

【参考方案1】:

    您可以根据名称重写,但这将是一个非常糟糕的规则集(您需要相应地重写每个州名、每个国家/地区名称和每个地区 - 基本上是您的所有数据库)。

    数据库中没有国家和州名吗?我建议您获取名称,将它们转换为 id,然后像以前一样使用 id(这是首选)。

将漂亮的 url 转换为参数的规则集:

RewriteEngine On
RewriteRule ^([^/]+)/([^/]+)/([^/]+) /?country_name=$1&state_name=$2&area_name=$3 [L,QSA]
RewriteRule ^([^/]+)/([^/]+) /?country_name=$1&state_name=$2 [L,QSA]
RewriteRule ^([^/]+) /?country_name=$1 [L,QSA]

第一条规则重写所有三个参数,第二个国家和州以及第三个国家 您甚至可以将其指向其他文件(不是您的常规索引),然后在将参数转换为 ID 后 - 包括原始处理程序

【讨论】:

最后,我们决定用与他们的数字相对应的国家、城市和地区名称来更新数据库。然后我们做了一个 htaccess 文件,其规则与您建议的有点相似。目前一切似乎都运行良好。

以上是关于URL 重写 - 名称到数字 (Apache)的主要内容,如果未能解决你的问题,请参考以下文章

tomcat 和 apache 整合后利用Tomcat 进行URL重写

如何从 url 中删除 id 和 title 并用域后跟标题名称重写它?

隐藏表单域URL重写cookiesession

如何为 GET 请求正确配置 Apache 重写规则?

特殊字符和 URL 重写

将具有单个非数字参数的动态 url 重定向到名称由参数值文本组成的静态无扩展根级 url