![从 URL 中删除 .php 和 .html](https://linux22.com/image/1151550/%E4%BB%8E%20URL%20%E4%B8%AD%E5%88%A0%E9%99%A4%20.php%20%E5%92%8C%20.html.png)
如何从我的 URL 中删除.php
和?.html
因此,事实不应该如此,而domain.com/about.php
应该是如此domain.com/about
。
我.htaccess
在 OVH 的网站托管上使用了相同的代码,但自从购买 VPS 并自己操作后,它就不起作用了。我只是收到 404 错误
该服务器上未找到所请求的 URL /about。
我在用着:
RewriteEngine On
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://domain.com/$1 [R=301,L]
DirectorySlash On
答案1
我的做法是:
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule (.*) $1.html [L]
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.htm -f
RewriteRule (.*) $1.htm [L]
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]
每个节都有以下逻辑:
如果请求的文件没有扩展名,即不匹配
\.[^./]+)$
,和请求的文件不是目录,和
请求的文件不存在,和
存在具有请求的名称和扩展名
.html
(或.htm
,或.php
)的文件,然后提供该文件。
最后或最终的手段[L]
:不再进行重写,因此服务器可以安全地跳过其余的重写规则。