删除.php和.html扩展名并且具有相同名称的目录?

时间:2018-03-10 10:07:48

标签: php html .htaccess

我想在浏览器中删除网站页面的.php和.html扩展名。我发现这个代码在线添加到.htaccess文件中:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php`

但是,如果有一个名为“home.php”的php文件,同时名为“home”的目录不再有效。我想我可能需要添加像

这样的东西
Options All -Indexes -MultiViews

但我喜欢这个也不行。 那我怎么能实现这个呢?

2 个答案:

答案 0 :(得分:4)

您可以在请求到来时为文件提供优先级,而/与目录名称相同,同时删除php & html并确定首先检查哪一个:

DirectorySlash Off
RewriteEngine on 
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.(php|html)[\s?/] [NC]
RewriteRule ^ /%1%2 [R=302,L,NE]
RewriteCond %{REQUEST_FILENAME}   !-f 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*) /$1.php [L]
RewriteCond %{REQUEST_FILENAME}   !-f 
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*) /$1.html [L]
RewriteCond %{REQUEST_FILENAME}   !-f 
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*) %{REQUEST_URI}/ [L,R=302]

所以,通过上面的代码,扩展将被删除然后将首先检查是否有php文件匹配,然后是html,最后是否有目录。

所以,/home的请求只会检查一个名为home的php,如果它存在,那么目录为home,但请求/home/about将直接进入主目录内。

清除浏览器缓存,然后对其进行测试,如果是,请将302更改为301以获得永久重定向

答案 1 :(得分:0)

您可以在.htaccess

中尝试使用此简单代码
RewriteEngine On
RewriteRule ^([^\.]+?)/?$ $1.php [NC,L]

<强>更新 正如@Niet提到我错过了条件所以在规则之前加上这一行。

RewriteCond %{REQUEST_FILENAME}\.php -f