2014-10-02 177 views
0

我试图从根目录重定向除图像,CSS,JavaScript以外的所有请求到我的index.php,因此用户无法直接访问.php等其他文件。.htaccess双查询字符串参数

我在.htaccess文件下列规则在我的网站的根目录:

RewriteEngine On 

RewriteBase/

RewriteCond %{REQUEST_URI} !\.(css|js|png|jpe?g|gif|bmp|txt)$ 

RewriteRule ^(.*)$ index.php?url=$1 [NC,L,QSA] 

在index.php文件,我写print_r($_SERVER)当我[QUERY_STRING]下访问例如/test它显示的东西我不理解:

array(
.. 
[QUERY_STRING] => url=index.php&url=test 
.. 
) 

我的问题是:这是怎么回事?这会影响网站的性能吗?

注意:如果我加了RewriteCond %{REQUEST_FILENAME} !-f它只显示url=test,但是这允许直接访问文件,所以删除了这个条件。

+1

这表明您有两个重定向。 /测试index.php?url =测试和比index.php第二个你有。 – Cheery 2014-10-02 20:23:01

+0

@Cheery是否可以只有一个重定向? – John 2014-10-02 20:24:41

+0

您是否尝试添加不重定向index.php请求的条件?实际上,这是'!-f'的工作方式 - 它不会在文件存在时重定向。 – Cheery 2014-10-02 20:25:19

回答

0

正如Cheery在评论中指出的那样,Apache正在执行多个重写。您应该将index.php添加到重写引擎应该单独留下的列表中:

RewriteCond %{REQUEST_URI} !index\.php$ 
+0

试图添加它在现有条件之前/之后,但仍然是相同的结果=> [QUERY_STRING] => url = index.php&url = foo – John 2014-10-02 20:30:21

+0

@John编辑过,再试一次? – wavemode 2014-10-02 20:36:21

+0

技术上它工作..直到请求包含... index.php $ – John 2014-10-02 20:52:40