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

时间:2016-04-06 14:03:03

标签: php .htaccess redirect url-redirection

我正在寻找一种可以将https://example.com/foo.php重定向到https://example.com/foo并将https://example.com/foo/重定向到https的方法: //example.com/foo。 在Stack Overflow上发布了大量的解决方案,但是它们都没有解决用户试图访问https://example.com/foo/bar/baz.php等文件的实例。 有人可以用.htaccess提出解决这个问题的方法吗? 我目前的代码是: ## hide .php扩展名 #从外部将/dir/foo.php重定向到/ 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] ##在内部将/ dir / foo重定向到/dir/foo.php RewriteCond%{REQUEST_FILENAME} .php -f RewriteRule ^(。*)$ $ 1.php [L]

1 个答案:

答案 0 :(得分:2)

请尝试以下规则:

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]

请务必在测试前清除浏览器缓存。