使用 htaccess 文件将 https URL 重定向到 http 等效 URL

使用 htaccess 文件将 https URL 重定向到 http 等效 URL

我的情况是,我为客户做了一个新网站,其URL格式为http://newsite.com。客户旧网站使用 SSL,并且 URL 格式为https://www.oldsite.co.uk。新网站上不需要 SSL,因此尚未使用。

旧网站在搜索引擎中的排名很好,因此客户希望使用 301 重定向来捕获对旧页面的任何请求,并将其转移到新网站上的等效页面,即旧网站上的 /contact.php 重定向到新联系页面。

问题是所有搜索引擎都已索引每个 URL 的 https:// 版本,而我需要重定向到非 SSL 的标准 http:// URL。简而言之,我需要的是一种方法来捕获任何以 https:// 开头的传入 URL,并以某种方式对其进行更改以查找此 URL 的 http:// 版本。

我的.htaccess 文件的内容:

RewriteEngine on
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^nielbally\.co\.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www\.nielbally\.co\.uk$
RewriteRule ^/?$ "http\:\/\/artcourseswales\.com\/" [R=301,L]

答案1

最好的配置是为旧站点名称创建一个虚拟主机,并对所有 URL 进行重定向。

<VirtualHost :443>
    ServerName oldsite.co.uk
    ServerAlias www.oldsite.co.uk

    RewriteRule ^(.*)$ http://newsite.co.uk$1
</VirtualHost>

答案2

在 .htaccess 文件中使用 RewriteRules 比较棘手。在这种情况下,您要匹配的不是请求的 URL,而是 apache 认为需要提供的文件名,以便满足请求。

您首先应该做的是启用日志记录,如下所述: http://httpd.apache.org/docs/current/mod/mod_rewrite.html#logging

这样你就会更加了解正在发生的事情。

重写引擎的一个让人意想不到的功能是 RewriteRule 和 RewriteCond 语句的执行顺序。基本上,RewriteRule 必须首先匹配。如果匹配,则从上到下评估 RewriteCond 行,并且只有当它们全部通过时才会执行替换。在您的 RewriteRule 中,您匹配 /? ,我怀疑这永远不会匹配,因此您添加的条件永远不会被评估。

也就是说,在虚拟主机中创建重定向是一个更好的解决方案,但我不知道您是否有权访问 apache 配置文件。

相关内容