重写/ foo到/foo.php不起作用

时间:2011-06-05 08:30:09

标签: php .htaccess mod-rewrite url-rewriting

我希望用户能够转到/ foo并显示/foo.php。谷歌的快速搜索提出了这个:

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

但出于某种原因,这不起作用。我一直收到404错误,即使我知道.php文件存在。我搜索并搜索了一个答案,但它似乎对其他人都很好。

顺便说一句,我对其他规则进行了评论,因此没有任何内容与此相冲突。

有什么想法吗?

6 个答案:

答案 0 :(得分:3)

这就是你需要的:

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

答案 1 :(得分:1)

也许您需要在apache配置中添加指令AllowOverride All,或者您需要在.htaccess文件的最开头添加RewriteEngine On

答案 2 :(得分:1)

您需要此规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /$1.php

答案 3 :(得分:1)

我找到了答案!显然这是1and1服务器配置的问题。本文解释了问题:http://tips.webdesign10.com/web-hosting/why-you-should-never-use-1and1-com-hosting

第一条评论也恰好是解决方案。这是有效的规则:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ /$1.php [L,QSA]

答案 4 :(得分:0)

或者您可以使用apache的MultiViews选项:

Options +MultiViews

答案 5 :(得分:0)

在子文件夹中使用.htaccess时出现此问题。通过使用.htaccess文件中的Web根目录的完整路径来修复它。例如,在文件夹http://www.mysite.com/test/中,您的.htaccess文件将如下所示:

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /test/$1.php

- 未经测试,可能需要调整 -