【发布时间】:2011-12-18 20:32:55
【问题描述】:
我有一个包含以下参数的网页。
http://www.somesite.com/community_details.php?comm_id=233®ion_id=2&city_id=40
我想改成这个
http://www.somesite.com/virginia/fairfax/some_community/
如何调用 db 返回区域、城市、社区以在 .htaccess 中重写 url?
【问题讨论】:
我有一个包含以下参数的网页。
http://www.somesite.com/community_details.php?comm_id=233®ion_id=2&city_id=40
我想改成这个
http://www.somesite.com/virginia/fairfax/some_community/
如何调用 db 返回区域、城市、社区以在 .htaccess 中重写 url?
【问题讨论】:
你不能。
您可以让community_details.php 进行数据库查找,然后调用die(header("Location: blahblahblah"));。但是你必须使用 .htaccess 和其他所有东西来处理它,所以根本不这样做可能会更容易 - 取决于这些 URL 对你的重要性。
【讨论】:
我认为;你不能
如果你的链接是http://www.somesite.com/virginia/fairfax/some_community/
您可以使用 htacces 将其更改为 http://www.somesite.com/community_details.php?comm_code=samo_community®ion_code=virginia&city_code=fairfax
并从数据库中获取代码的 id 以在 php 中使用。
【讨论】:
阅读本文是一个好的开始: http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritemap
您为您的模式创建一个正则表达式,然后编写一个外部 Perl/PHP 任何脚本来实现对 MySQL 表的哈希查找并将其返回给 Apache。
【讨论】:
这不是特别有效,但您可以使用RewriteMap 来使用外部 txt/dbm/program 让 mod_rewrite 根据结果进行查找和重写。
RewriteMap pretty-community prg:/path/to/some/shell/script
RewriteRule community_details.php?(.*) ${pretty-community:$1}
community_details.php 脚本中捕获的查询字符串将被传递到其标准输入上的指定外部脚本,该脚本通过其标准输出以重写后的 url 进行回复。
请注意,脚本在 Apache 首次启动时启动一次,然后基本上以守护程序模式运行,每次执行的重写都与 Apache 通信。由于 PHP 不是特别适合编写守护程序,因此您可能希望使用其他语言编写此程序。
【讨论】:
嗯,这很容易。
只需将所有虚拟请求路由到将查询数据库的 php scritp。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [QSA,L]
您将在 $_GET['request'] 中请求路径。
使用explode拆分它并从db中获取参数。
【讨论】: