【问题标题】:Multiple Rewrite Rules Before 301 With Htaccess使用 Htaccess 在 301 之前的多个重写规则
【发布时间】:2015-12-15 18:08:52
【问题描述】:

下午好,

一年前,我将我的域名迁移到了我购买的域名。我保持旧域处于活动状态,以便为迁移期间更改的近 5000 个链接处理自定义 301。虽然 95% 的 URL 被正确重定向,但我发现我在 htaccess 中的重写规则并没有捕获所有内容。我已经研究和测试了许多不同的变体,但没有运气,希望有人能提供帮助。

** 请记住,我的重写规则旨在格式化旧链接,然后最终将它们重定向到新域上的正确 URL。

我目前的重写规则是:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} on [OR]
RewriteCond %{HTTPS} off [NC]
RewriteRule ^(.*)/$ $1 [R=301,L]
RewriteRule ^(.*)RK= /$1 [L,NC,R=301]
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)$ http://newdomain.com/? [R=301,L]
RewriteCond %{REQUEST_URI} ^/$
Rewriterule ^(.*)$ http://newdomain.com/ [L,R=301]

再次重申,我当然不是 htaccess/Apache 专家,我只是在过去一年中通过大量试验和错误编制了这份清单。重写规则的目标是:

将任何 https 重写为 http:

RewriteCond %{HTTPS} on [OR]
RewriteCond %{HTTPS} off [NC]

删除尾部斜杠(如果存在):

RewriteRule ^(.*)/$ $1 [R=301,L]

要删除与将自身附加到某些 URL 的末尾并看起来像 /RK=0/RS=**** 的黑客尝试相关的代码:

RewriteRule ^(.*)RK= /$1 [L,NC,R=301]

要删除 URL 中对 index.php 的任何引用:

RewriteCond %{THE_REQUEST} ^.*/index.php

一旦应用了这些重写规则,链接就会根据我的 301 链接映射重定向。截至今天,这些重写规则非常有效,除了 https 到 http 重定向。无论出于何种原因,我都无法应用该规则,因此任何带有 https 的入站链接都会在“您的连接不是私有的”屏幕上停止并且不会重定向。有关如何使 https 到 http 规则正常工作的任何建议?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite redirect


    【解决方案1】:

    改变:

    # Do nothing !
    RewriteCond %{HTTPS} on [OR]
    RewriteCond %{HTTPS} off [NC]
    

    收件人:

    RewriteCond %{HTTPS} on
    RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301] 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2015-02-15
      • 2017-11-21
      相关资源
      最近更新 更多