我的情况是,我为一个客户做了一个新的网站,其url格式是http://newsite.com 。 客户的旧网站使用SSL,并具有URL格式https://www.oldsite.co.uk 。 SSL在新网站上不是必需的,因此尚未被使用。
旧网站在search引擎中的排名很好,因此,客户希望使用301redirect来捕获针对旧网页的任何请求,并将其转移到新网站上的等效页面上。 旧网站上的/contact.phpredirect到新的联系页面。
问题是,所有的search引擎已经索引每个url的https://版本,我需要redirect到一个非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]
最好的configuration是为旧网站名称创build一个虚拟主机,并为所有urlredirect。
<VirtualHost :443> ServerName oldsite.co.uk ServerAlias www.oldsite.co.uk RewriteRule ^(.*)$ http://newsite.co.uk$1 </VirtualHost>
在.htaccess文件中使用RewriteRules是棘手的。 在这种情况下,您所匹配的不是所请求的URL,而是Apache认为需要提供的文件名以满足请求。
你应该首先做的是启用日志logging,如下所述: http : //httpd.apache.org/docs/current/mod/mod_rewrite.html#logging
这样你就可以更多地了解正在发生的事情。
重写引擎的一个function是捕获人们不知道的是RewriteRule和RewriteCond语句的执行顺序。基本上RewriteRule必须首先匹配。 如果匹配,那么RewriteCond行将从上到下进行评估,并且只有全部通过才会执行replace。 在你的RewriteRule中,你正在匹配/? 我怀疑这永远不会匹配,所以你添加的条件永远不会被评估。
也就是说,在虚拟主机中创buildredirect是一个更好的解决scheme,但是我不知道是否有权访问apacheconfiguration文件。