新的.htaccess中断站点

时间:2019-05-21 19:37:23

标签: .htaccess

我承认我对编码是全新的。我正在尝试帮助使用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文件中,因此我不确定这是否会导致此问题。只是想着想他们在此错误发生之前所做的所有事情。

谢谢。

1 个答案:

答案 0 :(得分:0)

RewriteRule ^([^/]+)\.html$ $1 [QSA,L]

您不能像在.html中那样简单地“删除” .htaccess文件扩展名-它肯定会破坏您的网站。

实际上,您不能仅通过编辑.htaccess来删除文件扩展名。这是一个两个阶段的过程:

  1. 您需要在应用程序中的所有URL上删除.html扩展名。您需要更新所有内部链接以省略.html扩展名。

  2. 然后,您使用.htaccess内部重写不带扩展名的请求,回到包含扩展名.html的真实文件系统路径。在这一切之下,您的文件系统路径未更改。

    例如:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^.]+)$ $1.html [L]
    

    这假设您的URL不包含点(.)-除非它们直接请求文件(例如.js.css.jpg,等)

    您还需要确保MultiViews被禁用(如果尚未禁用),此功能才能正常运行。即。在.htaccess文件的顶部添加以下内容:

    Options -MultiViews
    
  3. 如果要更改现有的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]