我想在浏览器中删除网站页面的.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
但我喜欢这个也不行。 那我怎么能实现这个呢?
答案 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