删除.php扩展(明确写入)为友好的URL

htaccess删除我的网站的文件的.php扩展名。

RewriteEngine on RewriteBase / RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.*)$ $1.php [L,QSA] 

现在,如果我去我的网站

 www.mysite.com/home 

工作正常,它redirect到home.php但url仍然友好。

但是,如果我写这个url:

 www.mysite.com/home.php 

home.php服务,并且URL不友好。

我怎样才能避免这种行为? 我想如果用户写www.mysite.com/home.php,显示在URL栏中的URL是www.mysite.com/home

你可以像这样从请求中移除.php

 RewriteCond %{REQUEST_URI} ^/(.*).php$ RewriteRule ^(.*)$ %1 [L,QSA] 

 RewriteEngine On RewriteBase / # remove enter code here.php; use THE_REQUEST to prevent infinite loops RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP RewriteRule (.*)\.php$ $1 [R=301] # remove index RewriteRule (.*)/index$ $1/ [R=301] # remove slash if not directory RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} /$ RewriteRule (.*)/ $1 [R=301] # add .php to access file, but don't redirect RewriteCond %{REQUEST_FILENAME}.php -f RewriteCond %{REQUEST_URI} !/$ RewriteRule (.*) $1\.php [L] 

你也可以把这个代码放到你的.htaccess文件中:

 options +multiviews 

这样做是在当前目录中search可用的扩展名(.html,.htm和.php我认为)。 所以,如果你要求/user它会寻找user.php

您的重写将被忽略,因为它会根据您的规则检查现有文件:

 RewriteCond %{SCRIPT_FILENAME} !-f 

我会build议在php中添加一个URL检查redirect到本身(没有扩展名)。 或者如果有人访问现有的文件,你想显示404错误?