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



当使用以.html结尾的URL访问页面时,我希望URL更改为没有扩展名,并永久重定向report301。我遇到了严重的困难。在阅读了大量文档和教程,并搜索了Stack Overflow数小时后,我最接近的结果是使用以下代码(没有添加扩展名的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将永远不会被加载。

最新更新