永久重定向删除URL中的文件扩展名?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (92)

当使用以.html结尾的URL访问页面时,我希望URL更改为没有扩展名,并且报告301永久重定向。我遇到了严重的困难。阅读了大量的文档和教程,并在几个小时内搜索堆栈溢出后,我所获得的最接近的是相反的(没有扩展的URL,添加了一个),使用以下代码:

<Location />
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME}\.html -f
 RewriteCond %{REQUEST_URI} !/$
 RewriteCond %{REQUEST_URI} !\.html$
 RewriteRule ^(.*)$ https://%{HTTP:Host}%{REQUEST_URI}.html [L,R=permanent]
</Location>
提问于
用户回答回答于

这可以通过两个步骤完成,使用REDIRECT_LOOP环境变量来防止循环,使用Web根目录的部分中的指令(或Web根目录中的.htaccess),因此RewriteRule中的匹配字符串可用于永久性重定向。

<Directory "/var/www/html">

 RewriteEngine On

 RewriteCond %{REQUEST_FILENAME} !-d # if the request is not a directory
 RewriteCond %{REQUEST_FILENAME} !-f # if the request is not a file
 RewriteCond %{REQUEST_FILENAME}\.html -f # if adding .html it is a file
 RewriteCond %{REQUEST_URI} !\.html$ # if the request doesn't end in .html
 RewriteCond %{REQUEST_URI} !/$ # if the request doesn't end in /
 RewriteRule ^(.*)$ $1.html [L,E=LOOP:1] # then return the request as if it ended with .html and set the loop variable

 RewriteCond %{ENV:REDIRECT_LOOP} !1 # if we didn't just added .html
 RewriteRule ^(.*)\.html$ https://%{HTTP:Host}/$1 [L,R=permanent] # then 301 redirect the request to the request without the .html

</Directory>

这将使它如果你有example.htmlexample/index.html然后example.html永远不会被加载。

扫码关注云+社区

领取腾讯云代金券