2011-03-11 110 views
1

我有几个文件命名为“index.php?page = 1”,“news?id = 1”。我怎样才能设置Apache发送确切的这些文件与像“http://site.com/index.php?page=1”,“http://site.com/news?id=1”等查询 我试过.htaccess规则使apache2服务与查询字符串像名称的文件

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

它不起作用。

回答

1

您必须在用于请求的URL中编码特殊字符?=


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

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

在PHP中,这可以通过使用urlencode()函数来完成。注释后



编辑:在这种情况下(这是真的不好......),一个解决办法可能是使用像这样的重写规则:

RewriteRule .* temp.php 

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

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


例如,如果我把这个网址:

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']

+0

我不能这样做,因为所有链接已经生成。 – Molfar 2011-03-11 18:13:12

+0

@Molfar:哦,太糟糕了。我已经编辑了一些额外的信息我的答案;希望这可以帮助 ! – 2011-03-11 18:21:59