Php 将所有带有扩展名的URL重定向到无扩展名,包括子目录中的URL

Php 将所有带有扩展名的URL重定向到无扩展名,包括子目录中的URL,php,.htaccess,redirect,url-redirection,Php,.htaccess,Redirect,Url Redirection,我正在寻找一种可以重定向https://example.com/foo.php至https://example.com/foo和https://example.com/foo/至https://example.com/foo 对于这个问题,有大量的解决方案发布在堆栈溢出上,但是没有一个能够解决用户试图访问文件的实例,例如https://example.com/foo/bar/baz.php 有人能提出一些解决这个问题的建议吗 我目前拥有的代码是: ## hide .php extension #

我正在寻找一种可以重定向
https://example.com/foo.php
https://example.com/foo
https://example.com/foo/
https://example.com/foo

对于这个问题,有大量的解决方案发布在堆栈溢出上,但是没有一个能够解决用户试图访问文件的实例,例如
https://example.com/foo/bar/baz.php

有人能提出一些解决这个问题的建议吗

我目前拥有的代码是:

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+).php
RewriteRule ^ %1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)/\s
RewriteRule ^ %1 [R=301,L]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]
试试这些规则:

RewriteEngine On 

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.+?)\.php[\s?] [NC]
RewriteRule ^ %1 [R=302,L,NE]

## Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [NE,R=302,L]

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

请记住在测试之前清除浏览器缓存。

请发布您的代码我已经用我的现有代码更新了帖子,@starkeen-谢谢:)您的代码看起来应该可以正常工作。当导航到
https://example.com/foo/bar/
我得到了“XXXX重定向你太多次了。”我正要发布一个完全相同的答案,实际上是Cond2/rule2是罪魁祸首:)是的,如果
/foo/
是一个目录,那么
重写cond%{REQUEST\u FILENAME}-d
将保护这一点。