【问题标题】:How to force hiding .php extension with .htaccess [duplicate]如何使用 .htaccess 强制隐藏 .php 扩展名 [重复]
【发布时间】:2013-08-21 14:07:47
【问题描述】:
大家好,这是我的 .htaccess 文件代码
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
它工作得很好,但我想知道我是否可以强制隐藏 .php 扩展名,所以即使我去了www.example.com/foo.php 我也会被重定向到www.example.com/foo
有什么办法可以做到吗??
【问题讨论】:
标签:
php
.htaccess
redirect
mod-rewrite
url-rewriting
【解决方案1】:
这是可能的,但我们必须注意不要生成重定向循环,当非 php URL 重定向到 php 时。并且 php URL 重定向到一个非 php 的。另外我不喜欢这个想法,因为它会创建一个额外的重定向,这会减慢网站响应速度。
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#Redirect non-php to php and stop futher processing
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
#redirect .php to non-php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)\.php$ $1 [R=301,L]
【解决方案2】:
您可以匹配请求而不是 URI 以防止循环:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)\.php
RewriteRule ^ /%1 [L,R=301]
您可以将其附加到 htaccess 文件的末尾。