【问题标题】:Make apache2 to serve files with query string like names使 apache2 为带有查询字符串(如名称)的文件提供服务
【发布时间】:2011-03-11 18:09:23
【问题描述】:

我有几个名为“index.php?page=1”、“news?id=1”的文件。如何设置 apache 以使用“http://site.com/index.php?page=1”、“http://site.com/news?id=1”等查询准确发送这些文件。 我尝试了 .htaccess 规则

RewriteRule ^(.*)$ $1 [L,QSA]

它不起作用。

【问题讨论】:

    标签: php apache apache2


    【解决方案1】:

    您必须对用于请求的 URL 中的特殊字符 ?= 进行编码。


    例如,如果您的文件名为 strange.php?plop=1,那么您的 URL 必须是:

    http://tests/temp/strange.php%3Fplop%3D1
    

    在 PHP 中,这可以使用 urlencode() 函数来完成。



    在评论后编辑:在这种情况下(这真的不好......),一种解决方案可能是使用这样的重写规则:

    RewriteRule .*    temp.php
    

    这会将所有内容重定向到temp.php

    在那里,您可以使用$_SERVER 中的某些内容来查找请求。


    例如,如果我调用这个 URL:

    http://tests/temp/strange.php?plop=1
    

    并在我的temp.php 中使用这部分代码:

    var_dump($_SERVER);
    

    我得到这个输出:

    array
      ...
      'SERVER_NAME' => string 'tests' (length=5)
      'SERVER_ADDR' => string '127.0.0.1' (length=9)
      'SERVER_PORT' => string '80' (length=2)
      ...
      'REDIRECT_QUERY_STRING' => string 'plop=1' (length=6)
      'REDIRECT_URL' => string '/temp/strange.php' (length=17)
      ...
      'QUERY_STRING' => string 'plop=1' (length=6)
      'REQUEST_URI' => string '/temp/strange.php?plop=1' (length=24)
      'SCRIPT_NAME' => string '/temp/temp.php' (length=14)
      ...
    

    所以,在这里,我想我可以使用 $_SERVER['REQUEST_URI'] 重新构建文件名。

    【讨论】:

    • @Molfar :哦,太糟糕了。我用一些额外的信息编辑了我的答案;希望这会有所帮助!
    猜你喜欢
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 2023-03-12
    • 2015-09-14
    • 1970-01-01
    • 2013-09-15
    • 2019-05-29
    • 2019-03-09
    相关资源
    最近更新 更多