2011-01-12 107 views
0

我已经安装了一些Apache的虚拟主机(在Ubuntu上)。 在www-dirs中,我有一个名为info.php的文件(例如)。我可以通过/info.php和/ info(最后没有.php)打开这个文件。与.php相同的文件,没有.php没有任何mod_rewrite RewriteRule

Vhost或dir中没有mod_rewrite规则。

如果我尝试像一个重写规则:

RewriteRule ^info$ http://www.google.com/ [R=307,L] 

并重新打开/信息(不带.php)它不到风度的工作。

当我改变角色

RewriteRule ^info.php$ http://www.google.com/ [R=307,L] 

并重新打开/信息它的工作原理。

,当我尝试这条规则:

重写规则^(。*)$ echo.php值= $ 1 [L]

,并打开像/ foo的一个网站,并打印$值我得到什么? “echo.php”。当我尝试/富/酒吧我得到“echo.php /酒吧

有没有人有我的提示?

地址: 下面是从phpinfo()函数的一些信息:

SCRIPT_FILENAME /var/www/test/echo.php 
QUERY_STRING value=echo.php 
REQUEST_URI  /foo 
SCRIPT_NAME  /echo.php 

回答

1

您需要您的RewriteRule认为应该在哪里没有发生重写基本情况相匹配的RewriteCond。否则,您的重定向请求也将被重写。

0

美元符号表示字符串的结尾。你可以使用(未​​经测试):

RewriteRule ^info(.php)?$ http://www.google.com/ [R=307,L] 
0

能够访问文件,而无需编写扩展,由阿帕奇MultiViews选项引起的。要禁用它,请使用:

Options -Multiviews 

您可以尝试关闭它并查看它是否有效。

反之,如果您echo.php,你可以使用:

RewriteRule . echo.php [L] 

然后还要从REQUEST_URIecho.php检查它包含了原本请求的路径。