使apache2提供具有名称等查询字符串的文件

时间:2011-03-11 18:09:24

标签: php apache apache2

我有几个名为“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]

它不起作用。

1 个答案:

答案 0 :(得分:1)

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


例如,如果您的文件名为strange.php?plop=1,则您的网址必须为:

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

在PHP中,可以使用urlencode()函数完成此操作。



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

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'] 重新构建文件名。