删除 .php 和 .html 扩展名并拥有同名的目录?

Phi*_*ipp 2 html php .htaccess

我想在浏览器中删除我的网站页面的 .php 和 .html 扩展名。我在网上找到了这段代码,将其添加到 .htaccess 文件中:

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

但是,如果有一个名为“home.php”的 php 文件,同时有一个名为“home”的目录,则该方法将不再起作用。我想我可能需要添加类似的东西

Options All -Indexes -MultiViews
Run Code Online (Sandbox Code Playgroud)

但我喜欢这个,它也不起作用。那么我怎样才能实现这一目标呢?

Moh*_*hag 5

当请求没有与目录同名时,您可以给予文件优先级/,以及删除两者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]
Run Code Online (Sandbox Code Playgroud)

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

因此,仅的请求/home将首先检查名为 home 的 php 是否存在,然后检查 home 目录,但请求/home/about将直接转到约内部主目录。

清除浏览器缓存然后测试一下,如果可以的话,改成302永久301重定向