【问题标题】:htaccess url rewrite (db access)?htaccess url 重写(数据库访问)?
【发布时间】:2011-12-18 20:32:55
【问题描述】:

我有一个包含以下参数的网页。

http://www.somesite.com/community_details.php?comm_id=233&region_id=2&city_id=40

我想改成这个

http://www.somesite.com/virginia/fairfax/some_community/

如何调用 db 返回区域、城市、社区以在 .htaccess 中重写 url?

【问题讨论】:

    标签: php mysql .htaccess


    【解决方案1】:

    你不能。

    您可以让community_details.php 进行数据库查找,然后调用die(header("Location: blahblahblah"));。但是你必须使用 .htaccess 和其他所有东西来处理它,所以根本不这样做可能会更容易 - 取决于这些 URL 对你的重要性。

    【讨论】:

    • 好的,但是我如何编写我的 .htaccess 来接受参数以查看正确的页面..所以它理解 233 是 some_community region_id of 2 is Virginia and city_id of 40 equalfax
    【解决方案2】:

    我认为;你不能

    如果你的链接是http://www.somesite.com/virginia/fairfax/some_community/

    您可以使用 htacces 将其更改为 http://www.somesite.com/community_details.php?comm_code=samo_community&region_code=virginia&city_code=fairfax

    并从数据库中获取代码的 id 以在 php 中使用。

    【讨论】:

      【解决方案3】:

      阅读本文是一个好的开始: http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritemap

      您为您的模式创建一个正则表达式,然后编写一个外部 Perl/PHP 任何脚本来实现对 MySQL 表的哈希查找并将其返回给 Apache。

      【讨论】:

        【解决方案4】:

        这不是特别有效,但您可以使用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 不是特别适合编写守护程序,因此您可能希望使用其他语言编写此程序。

        【讨论】:

        • 马克,我在 RewriteBase / Options +FollowSymLinks RewriteMap examplemap txt:/var/www/html/mysite/key_pair.txt RewriteRule community_details.php?(.*) ${examplemap:$1现在我得到一个找不到页面。这是密钥对文本 252 Georgia/Kennesaw/Landings-at-Kennesaw-Mountain 的示例
        • 对不起不是页面没有找到它是这个。内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。
        • 500 个内部服务器错误会在服务器的错误日志中记录解释性原因。让 rewritemap 工作起来很棘手,您可能需要使用它一段时间。
        【解决方案5】:

        嗯,这很容易。
        只需将所有虚拟请求路由到将查询数据库的 php scritp。

        RewriteCond  %{REQUEST_FILENAME} !-f
        RewriteCond  %{REQUEST_FILENAME} !-d
        RewriteRule  ^(.*)$ index.php?request=$1 [QSA,L]
        

        您将在 $_GET['request'] 中请求路径。

        使用explode拆分它并从db中获取参数。

        【讨论】:

        • 几乎没有将数据库值返回给 .htaccess “用于 url 重写”,对
        猜你喜欢
        • 2011-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多