【问题标题】:Redirect to https for certain url only for wordpress site仅适用于 wordpress 网站的某些 url 重定向到 https
【发布时间】:2012-10-09 03:53:48
【问题描述】:

我正在开发一个 wordpress 网站。并且刚刚安装了 SSL。它已正确安装,但我只想将访问者重定向到某些页面的 https url。我也想强制浏览器对其他页面使用http。

我知道这可以通过 .htaccess 来完成,并且也尝试了几件事。但无法根据需要得到这个。我是处理 .haccess 重写规则的新手,找不到可以指导我的文档。

例如,我需要强制浏览器对这两个 url 使用 https: http://www.example.com/sells/payment/ http://www.example.com/customer/login/

对于所有其他 url,只需要强制使用普通的 http。我需要写什么样的规则?

更新 1

我还有一个将非 www url 重定向到 www url 的规则,这可能与这些规则冲突。这是我将所有非 www url 重定向到 www url 的方法。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

我面临的问题是,在应用 https 规则后,它被重定向到 https://www.www.example.com/sells/payment/,这是一个错误的 url。

有解决这个问题的想法吗?

【问题讨论】:

    标签: wordpress apache .htaccess mod-rewrite https


    【解决方案1】:

    这是我在项目中一直使用的,我的用例与你自己相似:

    RewriteCond %{SERVER_PORT}s ^(443(s)|[0-9]+s)$
    RewriteRule ^(.+)$ - [env=askapache:%2]
    
    # redirect urls with index.html to folder
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.html\ HTTP/
    RewriteRule ^(([^/]+/)*)index\.html$ http%{ENV:askapache}://%{HTTP_HOST}/$1 [R=301,L]
    
    # change // to /
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)//(.*)\ HTTP/ [NC]
    RewriteRule ^.*$ http%{ENV:askapache}://%{HTTP_HOST}/%1/%2 [R=301,L]
    

    这是我找到解决方案的网站的摘录,所以我不能相信它: Smart HTTP and HTTPS .htaccess Rewrite

    【讨论】:

      【解决方案2】:

      我没试过,但你能像处理 cononcial URLs 一样处理它吗?

      RewriteEngine On
      RewriteCond %{HTTP_HOST} ^example.com/your-page
      RewriteRule (.*) https://www.example.com/your-page [R=301,L]
      

      【讨论】:

        【解决方案3】:

        通过httpd.conf启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccessDOCUMENT_ROOT目录下:

        Options +FollowSymLinks -MultiViews
        # Turn mod_rewrite on
        RewriteEngine On
        RewriteBase /
        
        RewriteRule ^(sells/payment|customer/login)/ - [E=MY_URL:1]
        
        RewriteCond %{HTTPS} off
        RewriteCond %{ENV:MY_URL} 1
        RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
        
        RewriteCond %{HTTPS} on
        RewriteCond %{ENV:MY_URL} !=1
        RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
        

        更新:

        Options +FollowSymLinks -MultiViews
        # Turn mod_rewrite on
        RewriteEngine On
        RewriteBase /
        
        RewriteRule ^(sells/payment|customer/login)/ - [E=MY_URL:1]
        
        RewriteCond %{HTTPS} off
        RewriteCond %{ENV:MY_URL} 1
        RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
        
        RewriteCond %{HTTPS} on
        RewriteCond %{ENV:MY_URL} !=1
        RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
        

        【讨论】:

        • 谢谢,这似乎有效。但是在应用您的规则后,它会被重定向到 https,但会重定向到错误的 url。这可能是因为我有将非 www url 重定向到 www url 的规则。请参阅有关该问题的更新详细信息。请多多指教。
        • @Krunal 确保您现有的添加www 的规则出现在我在您的.htaccess 中的代码之后。
        • 感谢您的更新。我也检查过。该 URL 现在被重定向到不存在的 www.example.com/sells/payment。请注意 URL 开头的两个 www。请指教。
        • 我尝试了将非 www 重定向到 www url 的评论规则,但问题仍然相同。不知道发生了什么。请多多指教。
        • 这也不起作用:(现在它被重定向到example.com/index.php。知道发生了什么吗?规则似乎在这里也不起作用......htaccess.madewithlove.be
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-18
        • 1970-01-01
        • 2014-06-11
        • 1970-01-01
        • 2016-07-15
        • 1970-01-01
        相关资源
        最近更新 更多