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
将保护这一点。