在重新路由到HTTPS的同时,删除URL末尾的.html

时间:2019-08-20 15:24:58

标签: php html .htaccess web

我需要将我的网站从http重定向到https才能使用SSL证书,但是我也想删除URL末尾的.html。我似乎无法使其正常工作。

这是我的代码:

# Redirect HTTP to HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Remove .html from URL
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]

以下代码禁用SSL,并且不会重新路由到HTTPS。

2 个答案:

答案 0 :(得分:0)

这应该有效:

 # Redirect HTTP to HTTPS
 RewriteEngine On
 RewriteCond %{HTTPS} off
 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

 # Remove .html from URL
 #RewriteCond %{REQUEST_FILENAME} !-f
 #RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)\.html /$1 [L,R=301,NC]

确保在每次测试之前清除浏览器缓存。

问题出在第RewriteCond %{REQUEST_FILENAME} !-f行,因为该文件确实存在并且重写规则未得到处理。因此,我删除了它(注释)以及下一行RewriteCond %{REQUEST_FILENAME} !-d,如果(.*)中没有目录,则应该保留该行,并且测试正常。不过,我没有使用该RewriteCond对其进行测试。但是我使用了这段代码,效果很好。

答案 1 :(得分:0)

#remove html file extension-e.g. https://example.com/file.html will become https://example.com/file
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [NC,L]