使用.htaccess去掉.php并重定向到非.php版本

3
我有一个网站,需要删除每个文件的 .php 扩展名,并将指向任何包含 .php 扩展名的文件的链接重定向到相同的文件但没有 .php 扩展名。
我找到了以下代码。它非常有用,但在这个示例中,任何包含在文件夹中的内容都将被重定向到根目录: http://www.example.com/folder/file.php 重定向到 http://www.example.com/file(没有 .php)
代码如下:
RewriteEngine On
#Remove .php extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

#Redirect without .php
RewriteCond %{THE_REQUEST} \.php
RewriteRule ^(.*)\.php$ /$1 [R=301,L]

有什么想法是错的吗?

这个 .htaccess 文件是在 folder/ 目录里面吗? - anubhava
不,不是的。我只把它放在了根目录下。我应该复制到每个文件夹吗? - Paulo
1个回答

2

请用这个规则替换你现有的规则,然后在一个新的浏览器中重新测试,或者彻底清空浏览器缓存:

RewriteEngine On

# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]

## To internally rewrite /dir/file to /dir/file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

现在文件夹内的所有内容都重定向到主页,没有任何文件名。也不起作用。 - Paulo
这些规则已经在我的实际网站上生效,用于移除“.php”扩展名,因此规则本身没有问题。 - anubhava
没问题,去掉 .php 后缀可以正常工作。但是对于文件夹中的任何文件,当我点击链接时,它会将我重定向到主页。例如链接 example.com/folder/file.php会导致我跳转到 example.com - Paulo
“example.com/folder/file.php”的链接并不符合我提出的这两条规则。你的.htaccess文件中是否还有其他规则?同时,测试一下Apache服务器端配置中是否有其他的.htaccess或规则。请检查你的Apache版本。 - anubhava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接