我承认我对编码是全新的。我正在尝试帮助使用Dreamweaver在其总部的服务器上发布其网站的客户。我要求他们的IT部门将代码添加到他们的.htaccess文件中,这将有助于将非https重定向到https并强制使用www,而且还删除了.html扩展名。我很确定代码正确无误,但是当他们添加代码时,该网站崩溃了。
旧的.htaccess文件具有以下代码:
/var/www/html/HRT/.htaccess
RedirectMatch 301 ^/here(/.+?)?$ http://go.example.com/here
RedirectMatch 301 ^/HERE(/.+?)?$ http://go.example.com/here
RedirectMatch 301 ^/there(/.+?)?$ http://go.example.com/there
RedirectMatch 301 ^/THERE(/.+?)?$ http://go.example.com/there
我更改了隐私网址。只是以前有这个工作。但是,当我要求他们添加以下代码时,它坏了。甚至从哪里都不确定。
# FORCE HTTPS, FORCE WWW and REMOVE HTML #
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]
RewriteRule ^([^/]+)\.html$ $1 [QSA,L]
# EXPIRES CACHING VIA HTACCESS #
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
我应该注意,在前一周,他们也将其缓存添加到了http.config文件中,因此我不确定这是否会导致此问题。只是想着想他们在此错误发生之前所做的所有事情。
谢谢。
答案 0 :(得分:0)
RewriteRule ^([^/]+)\.html$ $1 [QSA,L]
您不能像在.html
中那样简单地“删除” .htaccess
文件扩展名-它肯定会破坏您的网站。
实际上,您不能仅通过编辑.htaccess
来删除文件扩展名。这是一个两个阶段的过程:
您需要在应用程序中的所有URL上删除.html
扩展名。您需要更新所有内部链接以省略.html
扩展名。
然后,您使用.htaccess
来内部重写不带扩展名的请求,回到包含扩展名.html
的真实文件系统路径。在这一切之下,您的文件系统路径未更改。
例如:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ $1.html [L]
这假设您的URL不包含点(.
)-除非它们直接请求文件(例如.js
,.css
,.jpg
,等)
您还需要确保MultiViews
被禁用(如果尚未禁用),此功能才能正常运行。即。在.htaccess
文件的顶部添加以下内容:
Options -MultiViews
如果要更改现有的URL结构,则需要实施外部重定向以从URL物理上删除.html
扩展名,以保留SEO。但是,您应该仅在完成上述第1步(和第2步)并删除所有内部URL上的.html
扩展名后才能实施此操作(否则您的用户将遭受外部重定向在浏览网站时,会在每个链接上显示该链接,这会很慢,并且使访问服务器的请求增加一倍。
例如,以下重定向将需要在重写之前(上)(上):
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.+)\.html$ /$1 [R=302,L]
检查环境变量REDIRECT_STATUS
的条件确保我们仅将直接请求作为目标,而不将重写的请求作为目标。
请注意,这当前是302(临时)重定向。一旦确认它可以正常工作,请仅将其更改为301(永久)重定向,以避免缓存问题。
# Disable MultiViews
Options -MultiViews
然后在标准HTTP到HTTPS和非www到www重定向的下面添加以下内容:
# Redirect to remove the ".html" extension from direct requests
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.+)\.html$ /$1 [R=302,L]
# Internal rewrite to re-append the ".html" extension for the internal request
# NB: Exclude requests for directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ $1.html [L]