【问题标题】:Rule to transform my path to an entire query将我的路径转换为整个查询的规则
【发布时间】:2013-08-11 20:31:48
【问题描述】:

示例:

我进入浏览器:

www.example.com/documents/pages/doc.php?bacon=baked&this=tastes_good

我希望这个链接访问这个页面,并将路径编码到查询中:

www.example.com/index.php?url=documents%2Fpages%2Fdoc.php%3Fbacon%3Dbaked%26this%3Dtastes_good

问题是这个 index.php 需要使用大的“url”查询变量在 PHP 中解码和修改它,然后 fopen() 来自其他站点的想要的页面。
我需要做这一切,因为这两个站点需要使用相同的 $_SESSION、数据库和文件,而且完全分开会更加困难。

【问题讨论】:

    标签: php .htaccess url-rewriting query-string url-encoding


    【解决方案1】:

    假设您的网络根 / 目录中有您的 .htaccess

    RewriteEngine on
    RewriteBase /
    
    RewriteCond %{REQUEST_URI} !^/index\.php [NC]
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^(.*)$ index.php?url=$1%3F%1 [B,NE,L]
    

    如果您仍然发现那些/s 没有被编码为%2F,您可能必须在服务器的httpd.conf 配置文件中启用AllowEncodedSlashes

    【讨论】:

    • 我的 .htaccess 中已经有一些行,如果我只是将其添加到末尾,是否可以,或者它可能会干扰已经存在的内容?已经存在的内容包含一些 Rewritecond 并以 [L] 结尾,我不知道它做了什么,或者这些条件是否可以扩大到这些新行......?
    • 只需复制我的最后两行并粘贴到其他现有规则下方。这样它就不会破坏任何东西。
    • 我测试过:http://htaccess.madewithlove.be/,它会输出http://www.example.com/index.php,它似乎不起作用。可能是因为“?”需要转义的字符。
    • 该站点不支持所有 % 变量,例如 %{SCRIPT_FILENAME} 等。
    • 它几乎可以工作,但是当我回显实际 URL 和 QUERY 时,它看起来像:index.php?url=index.phpFurl=documents/pages/doc.phpFbacon=baked&this=tastes_good
    猜你喜欢
    • 2015-02-06
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2018-08-12
    • 2011-04-01
    • 1970-01-01
    • 2018-10-15
    • 2015-08-09
    相关资源
    最近更新 更多