新建.htaccess站点
我承认我对编码是全新的。我正试图帮助一位使用Dreamweaver在总部的服务器上发布网站的客户。我要求他们的IT部门将代码添加到他们的.htaccess文件中,这将有助于将非https重定向到https,并强制www,但同时删除.html扩展名。我很确定代码是正确的,但当他们添加代码时,网站崩溃了 旧的.htaccess文件具有以下代码:新建.htaccess站点,.htaccess,.htaccess,我承认我对编码是全新的。我正试图帮助一位使用Dreamweaver在总部的服务器上发布网站的客户。我要求他们的IT部门将代码添加到他们的.htaccess文件中,这将有助于将非https重定向到https,并强制www,但同时删除.html扩展名。我很确定代码是正确的,但当他们添加代码时,网站崩溃了 旧的.htaccess文件具有以下代码: /var/www/html/HRT/.htaccess RedirectMatch 301 ^/here(/.+?)?$ http://go.example
/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
为了隐私,我更改了URL。只是让它在以前起作用。但是当我要求他们添加下面的代码时,它坏了。甚至不知道从哪里开始
# 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>
#强制HTTPS、强制WWW和删除HTML#
重新启动发动机
重写cond%{HTTPS}关闭[或]
重写cond%{HTTP_HOST}^www\。[北卡罗来纳州]
重写cond%{HTTP_HOST}^(?:www\)?(.+)$[NC]
重写规则^https://www.%1%{REQUEST_URI}[L,NE,R=301]
重写规则^([^/]+)\.html$$1[QSA,L]
#通过HTACCESS使缓存过期#
过期于
过期按类型映像/jpg“访问1年”
过期按类型图像/jpeg“访问1年”
ExpiresByType image/gif“访问1年”
过期按类型图像/png“访问1年”
ExpiresByType文本/css“访问1个月”
ExpiresByType text/html“访问1个月”
过期按类型应用程序/pdf“访问1个月”
ExpiresByType文本/x-javascript“访问1个月”
过期按类型应用程序/x-shockwave-flash“访问1个月”
过期按类型图像/x图标“访问1年”
ExpiresDefault“访问1个月”
我应该注意到,在前一周,他们也在http.config文件中添加了使缓存过期的内容,因此我不确定这是否会导致此问题。试着想想他们在犯错误之前所做的一切
提前谢谢
你不能像在.htaccess
中那样简单地“删除”.html
文件扩展名-它肯定会破坏你的网站
事实上,您不能仅通过编辑.htaccess
来删除文件扩展名。这是一个两阶段的过程:
.html
扩展名。所有内部链接都需要更新,以省略.html
扩展名.htaccess
在内部重写请求,而不使用扩展名,返回到包含.html
扩展名的实际文件系统路径。在这一切之下,您的文件系统路径没有改变
例如:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ $1.html [L]
这假设您的URL不包含点(
)-除非它们直接请求文件(例如.js
,.css
,.jpg
,等等)
您还需要确保禁用(如果尚未禁用)多视图才能正常工作。例如,在.htaccess
文件的顶部包括以下内容:
Options -MultiViews
.html
扩展,以保留SEO。但是,只有当您完成了上述步骤1(和步骤2)并且删除了所有内部URL上的.html
扩展名时,您才应该实现这一点(否则,您的用户在浏览站点时会在每个链接上遭受外部重定向,这将导致速度变慢,并使服务器上的请求增加一倍)
例如,在重写之前需要执行以下重定向(如上所述):
检查REDIRECT\u STATUS
环境变量的条件确保我们只针对直接请求,而不是重写的请求
请注意,这当前是一个302(临时)重定向。只有在确认其正常工作后才将其更改为301(永久)重定向,以避免缓存问题# 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]
你不能像在.htaccess
中那样简单地“删除”.html
文件扩展名-它肯定会破坏你的网站
事实上,您不能仅通过编辑.htaccess
来删除文件扩展名。这是一个两阶段的过程:
.html
扩展名。所有内部链接都需要更新,以省略.html
扩展名.htaccess
在内部重写请求,而不使用扩展名,返回到包含.html
扩展名的实际文件系统路径。在这一切之下,您的文件系统路径没有改变
例如:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ $1.html [L]
这假设您的URL不包含点(
)-除非它们直接请求文件(例如.js
,.css
,.jpg
,等等)
您还需要确保禁用(如果尚未禁用)多视图才能正常工作。例如,在.htaccess
文件的顶部包括以下内容:
Options -MultiViews
.html
扩展,以保留SEO。但是,只有当您完成了上述步骤1(和步骤2)并且删除了所有内部URL上的.html
扩展名时,您才应该实现这一点(否则,您的用户在浏览站点时会在每个链接上遭受外部重定向,这将导致速度变慢,并使服务器上的请求增加一倍)
例如,在重写之前需要执行以下重定向(如上所述):
检查REDIRECT\u STATUS
环境变量的条件确保我们只针对直接请求,而不是重写的请求
请注意,这当前是一个302(临时)重定向。只有在您确认其工作正常后才将其更改为301(永久)重定向-以避免卡奇
# 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]