强制HTTP除了htaccess(SEO)中的特定页面

时间:2013-10-09 03:12:16

标签: wordpress apache .htaccess https seo

我正在尝试搜索引擎优化电子商务网站。该网站在Wordpress平台上使用WooCommerce插件。此外,它还有一个authorize.net网关,允许用户直接在网站上付款。这意味着该站点需要SSL证书。

出于搜索引擎优化的原因,我希望/需要网站在HTTP协议上运行,但支付网关页面(/ cart,/ my-account,/ checkout等等)除外,这些页面应直接指向HTTPS协议。

目前我有以下代码:

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/cart/
RewriteCond %{REQUEST_URI} !^/checkout/

RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

使用此代码我遇到了一些问题。首先,当我访问“购物车”页面时,它不会重定向到https,但是结帐页面会这样做。

其次,当结帐页面加载时,它不会加载我的一些托管内容(Css,JS,img等...)。我猜这是因为他们没有使用相同的https协议。我该如何解决?

第三,当我使用https://mydomain.com/somepage手动访问网站时,不是301将我重定向到http://mydomain.com/somepage版本。

所有这些让我相信上面的代码编写不正确。有没有人有任何想法? SEO很重要,因此唯一应该显示的页面是http://页面(我指定的页面除外)。将https版本301重定向到http://

以下是我的htaccess文件现在的样子 -

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/cart/
RewriteCond %{REQUEST_URI} !^/checkout/

RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

<FilesMatch "^(wp-comments-post\.php)">
Order Allow,Deny
Deny from xx.xxx.xx.
Deny from xx.xxx.xx.
Deny from xx.xxx.xx.
Allow from all
</FilesMatch>

1 个答案:

答案 0 :(得分:1)

在你的wordpress规则之前,将SSL /非SSL重定向。您还需要规则,不仅要将重定向到 HTTPS,还要将 HTTPS重定向到HTTP:

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/cart/
RewriteCond %{REQUEST_URI} !^/checkout/
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^(cart|checkout)/ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress