改进mod_rewrite规则

时间:2015-08-12 22:25:32

标签: regex apache .htaccess mod-rewrite redirect

您能否看看下面的代码,并说这是否是正确的方法。

为了重定向:

http://blog.exampledomain.com/2013/10/testpage.html

https: //exampledomain.com/blog/testpage/

我已将以下重写规则放在2 .htaccess文件中:

  1. exampledomain.com根目录的.htaccess文件中,我放置了:

    RewriteCond %{HTTP_HOST} ^blog\.exampledomain\.com$ [NC,OR]
    RewriteCond %{HTTP_HOST} ^www\.blog\.exampledomain\.com$ [NC]
    RewriteRule ^(.*)$ https://exampledomain.com/blog/$1 [R=301,L]
    
  2. exampledomain.com/blog的博客文件夹中的.htaccess文件中,我放置了:

    RewriteRule ^([0-9]{4})/([0-9]{2})/(.*)\.html https://exampledomain.com/blog/$3/ [R=301,L]
    
  3. 问题:

    1. 这是正确的方法吗?

    2. 这是否意味着在此设置中我们有2个重定向? (这可能对SEO不利)这些应该结合起来吗?怎么样?

1 个答案:

答案 0 :(得分:1)

这两个重定向应合并为一个。

在子域的文档根目录中的.htaccess文件中(看起来它可能与主域的文档根目录相同?或者在主域.htaccess文件中 - 如果这是文件系统上的父目录) ),尝试以下方法:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?blog\.exampledomain\.com$
RewriteRule ^\d{4}/\d\d/(.+)\.html$ https://exampledomain.com/blog/$1/ [R,L]

当您确定这项工作正常时,请将临时重定向(R)更改为永久重定向(R=301)。

更新要同时从http://blog.exampledomain.com/重定向到https://exampledomain.com/blog/http://blog.exampledomain.com/whatever再转到https://exampledomain.com/blog/whatever,请在之后添加以下指令 / em>以上:

RewriteCond %{HTTP_HOST} ^(www\.)?blog\.exampledomain\.com$
RewriteRule ^(.*)$ https://exampledomain.com/blog/$1 [R,L]