关于 SSL 和规范化的 .htaccess 代码问题
.htaccess code questions about SSL and canonicalization
简而言之,我的网站只有一个付款页面。已安装 SSL 证书,但该付款页面不需要单独证书。
关于我的 .htaccess
文件 - 我目前使用以下代码分隔我的付款页面。我还阻止了来自 semalt.com
的访客。不记得确切原因,但我想我当时收到了他们不想要的关注(垃圾邮件)。
我想知道的是:
- 此代码在 5 年后仍然有效吗?
- 我是否需要通过指向 www 或非 www 版本的我的网站来解决规范化问题(重要的是不影响那个重要的 https 支付页面);有必要吗?
1. Options +FollowSymlinks
2. RewriteEngine On
3. RewriteBase /
4. # RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
5. # RewriteRule .* http://example.com%{REQUEST_URI} [L,R=301]
6.
7. RewriteCond %{HTTPS} off
8. RewriteRule ^payment\.html$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
9.
10. # block visitors referred from semalt.com
11. RewriteEngine on
12. RewriteCond %{HTTP_REFERER} semalt\.com [NC]
13. RewriteRule .* – [F]
14. # End semalt block
15. # block referer spam buttons for website
16. RewriteEngine On
17. RewriteCond %{HTTP_REFERER} buttons\-for\-website\.com
18. RewriteRule ^.* - [F,L]
19. # End buttons for website block
20.
21. ErrorDocument 404 /404.html
我要解决的主要问题是您只是为您的支付页面重定向到 HTTPS。您应该为您的整个站点强制使用 HTTPS——无处不在。如今,浏览器会提醒用户,如果使用 HTTP(Google Chrome 在 URL 旁边声明 "Not Secure"),他们正在浏览不安全的连接,这是行不通的一切为了用户的信任。这是过去 5 年发生的主要变化 - HTTPS 是强制性的 无处不在。
现在没有充分的理由不使用 HTTPS。
假设您网站的其余部分已经是 HTTPS "ready"(我假设它一定是并且您没有将用户从您的支付页面发送回 HTTP?!)然后将 HTTP 更改为 HTTPS 重定向到包括您的整个网站:
# HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
2) do I need to address canonicalization by directing to either a www or non-www version of mywebsite (importantly without affecting that one important https payments page); is it necessary?
是的,你应该。您的 .htaccess
文件顶部已经有指令 - 但它们被注释掉了?您可能已经在页面的头部设置了 rel="canonical"
元素,但除此之外,如果 www 和非 www 都可用,那么这可能是 重复内容 (相同内容可从 2 个或更多不同的 URLs 获得)。您需要决定:www 还是非 www?你目前看好哪个?哪个(主要)已经编入索引?您的付款页面使用哪个? (希望以上所有答案都是一样的。)
作为此重定向的一部分,也直接重定向到 HTTPS。这应该在 之前 当前 HTTP 到 HTTPS 重定向(与当前 .htaccess
文件中的顺序相同):
# Redirect to non-www
RewriteCond %{HTTP_HOST} !=example.com
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
请注意,上面的 www 到非 www 重定向假设您没有使用任何其他子域。要重定向到 www.example.com
,只需更改 example.com
.
的两个实例
RewriteCond %{HTTP_REFERER} semalt\.com [NC]
RewriteRule .* – [F]
好的,如果有帮助 - 检查您的服务器日志是否对您有用。但是将 .*
正则表达式更改为 ^
(稍微更有效)。并且任何阻塞指令都应该位于文件的最顶部(您不想打扰规范化这些请求)。
RewriteCond %{HTTP_REFERER} buttons\-for\-website\.com
RewriteRule ^.* - [F,L]
再次 - 好的,它有帮助(是吗?!)。如上所述优化正则表达式。无需反斜杠转义 CondPattern 中的文字连字符(除非它们出现在字符 class 的中间)。与 F
.
一起使用时不需要 L
标志
其他说明:
- 无需重复
RewriteEngine On
指令。
- 您的当前指令不需要
RewriteBase /
指令。
- 在文件顶部定义您的
ErrorDocument
会更清楚。
总结
综合以上几点我们有:
Options +FollowSymlinks
ErrorDocument 404 /404.html
RewriteEngine On
# block visitors referred from semalt.com
RewriteCond %{HTTP_REFERER} semalt\.com [NC]
RewriteRule ^ – [F]
# block referer spam buttons for website
RewriteCond %{HTTP_REFERER} buttons-for-website\.com [NC]
RewriteRule ^ - [F]
# Redirect to non-www
RewriteCond %{HTTP_HOST} !=example.com
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
# HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
简而言之,我的网站只有一个付款页面。已安装 SSL 证书,但该付款页面不需要单独证书。
关于我的 .htaccess
文件 - 我目前使用以下代码分隔我的付款页面。我还阻止了来自 semalt.com
的访客。不记得确切原因,但我想我当时收到了他们不想要的关注(垃圾邮件)。
我想知道的是:
- 此代码在 5 年后仍然有效吗?
- 我是否需要通过指向 www 或非 www 版本的我的网站来解决规范化问题(重要的是不影响那个重要的 https 支付页面);有必要吗?
1. Options +FollowSymlinks
2. RewriteEngine On
3. RewriteBase /
4. # RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
5. # RewriteRule .* http://example.com%{REQUEST_URI} [L,R=301]
6.
7. RewriteCond %{HTTPS} off
8. RewriteRule ^payment\.html$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
9.
10. # block visitors referred from semalt.com
11. RewriteEngine on
12. RewriteCond %{HTTP_REFERER} semalt\.com [NC]
13. RewriteRule .* – [F]
14. # End semalt block
15. # block referer spam buttons for website
16. RewriteEngine On
17. RewriteCond %{HTTP_REFERER} buttons\-for\-website\.com
18. RewriteRule ^.* - [F,L]
19. # End buttons for website block
20.
21. ErrorDocument 404 /404.html
我要解决的主要问题是您只是为您的支付页面重定向到 HTTPS。您应该为您的整个站点强制使用 HTTPS——无处不在。如今,浏览器会提醒用户,如果使用 HTTP(Google Chrome 在 URL 旁边声明 "Not Secure"),他们正在浏览不安全的连接,这是行不通的一切为了用户的信任。这是过去 5 年发生的主要变化 - HTTPS 是强制性的 无处不在。
现在没有充分的理由不使用 HTTPS。
假设您网站的其余部分已经是 HTTPS "ready"(我假设它一定是并且您没有将用户从您的支付页面发送回 HTTP?!)然后将 HTTP 更改为 HTTPS 重定向到包括您的整个网站:
# HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
2) do I need to address canonicalization by directing to either a www or non-www version of mywebsite (importantly without affecting that one important https payments page); is it necessary?
是的,你应该。您的 .htaccess
文件顶部已经有指令 - 但它们被注释掉了?您可能已经在页面的头部设置了 rel="canonical"
元素,但除此之外,如果 www 和非 www 都可用,那么这可能是 重复内容 (相同内容可从 2 个或更多不同的 URLs 获得)。您需要决定:www 还是非 www?你目前看好哪个?哪个(主要)已经编入索引?您的付款页面使用哪个? (希望以上所有答案都是一样的。)
作为此重定向的一部分,也直接重定向到 HTTPS。这应该在 之前 当前 HTTP 到 HTTPS 重定向(与当前 .htaccess
文件中的顺序相同):
# Redirect to non-www
RewriteCond %{HTTP_HOST} !=example.com
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
请注意,上面的 www 到非 www 重定向假设您没有使用任何其他子域。要重定向到 www.example.com
,只需更改 example.com
.
RewriteCond %{HTTP_REFERER} semalt\.com [NC] RewriteRule .* – [F]
好的,如果有帮助 - 检查您的服务器日志是否对您有用。但是将 .*
正则表达式更改为 ^
(稍微更有效)。并且任何阻塞指令都应该位于文件的最顶部(您不想打扰规范化这些请求)。
RewriteCond %{HTTP_REFERER} buttons\-for\-website\.com RewriteRule ^.* - [F,L]
再次 - 好的,它有帮助(是吗?!)。如上所述优化正则表达式。无需反斜杠转义 CondPattern 中的文字连字符(除非它们出现在字符 class 的中间)。与 F
.
L
标志
其他说明:
- 无需重复
RewriteEngine On
指令。 - 您的当前指令不需要
RewriteBase /
指令。 - 在文件顶部定义您的
ErrorDocument
会更清楚。
总结
综合以上几点我们有:
Options +FollowSymlinks
ErrorDocument 404 /404.html
RewriteEngine On
# block visitors referred from semalt.com
RewriteCond %{HTTP_REFERER} semalt\.com [NC]
RewriteRule ^ – [F]
# block referer spam buttons for website
RewriteCond %{HTTP_REFERER} buttons-for-website\.com [NC]
RewriteRule ^ - [F]
# Redirect to non-www
RewriteCond %{HTTP_HOST} !=example.com
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
# HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]