我需要将我的网站从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。
答案 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]