如何从网站的url隐藏.html扩展名

我知道这个问题之前已经被问过,但是没有人知道隐藏.html扩展的好方法。 我已经尝试了许多代码和许多从https://stackoverflow.com/的答案,但没有看到结果。 那我再问你一次

我有一个静态网站,我想删除扩展名来清理我的url。 我正在使用静态HTML文件。

删除扩展名之前,该url将阅读website.com/about.html

随着扩展删除,它将看起来像website.com/about。 希望很清楚。

我有一个.htaccess文件,我尝试了很多的代码,但它不工作。 这里是一些代码

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\.html$ /$1 [L,R=301] RewriteCond %{THE_REQUEST} \ /(.+/)?index(\.html)?(\?.*)?\ [NC] RewriteRule ^(.+/)?index(\.html)?$ /%1 [R=301,L] RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^(.+)\.html$ /$1 [R=301,L] RewriteCond %{SCRIPT_FILENAME}.html -f RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L] RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /index\.html\ HTTP/ RewriteRule ^index\.html$ http://%{HTTP_HOST}/ [R=301,L] RewriteEngine On RewriteBase / RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ $1.html [NC,L] RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.html -f RewriteRule ^(.*)$ $1.html RewriteBase / RewriteEngine on RewriteRule ^(.*)\.htm$ $1.html [nc] RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L] 

但是我没有看到任何结果… 🙁

你有你的规则颠倒(第一个否则工作):

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ $1.html [L] 

你原来的规则是RewriteRule ^(.*)\.html$ $1 [L]这意味着“如果请求的资源名以.html结尾,那么发出一个重定向到浏览器告诉它我们是否有任何东西没有HTML的名字“。 这导致了404(因为Apache没有任何东西可以为.html提供更少的资源)。

通过将.html切换到目标RewriteRule ^(.*)$ $1.html [L]我们将规则更改为“如果请求的资源名称不是磁盘上的文件或目录,则尝试重新路由请求内部,不要告诉浏览器),就好像它以.html结尾“。

请注意,您不需要复杂的(本质上)RewriteRules这样的任务。

mod_negotiation apache模块通常默认启用,它提供了Multivews选项的这种行为。

如果服务器收到/ some / dir / foo的请求并且/ some / dir / foo不存在,那么服务器将读取目录,查找所有名为foo。*的文件,并有效地伪造一个名为all文件,为它们分配相同的媒体类型和内容编码,如果客户要求其名称中的一个,将会有这种编码。 然后选择与客户要求最匹配的,并返回该文件。

.ie请求foo/bar将服务foo/bar如果它是我们的目录,将泄漏foo/bar.htmlfoo/bar.txt等等,如果不是。

您只需确保在当前上下文中激活此选项(例如,目录)

 Options +Multiviews 

用这个

  Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ $1.html [L,QSA]