子域名/子文件夹重定向冲突

时间:2017-04-10 19:25:45

标签: wordpress .htaccess redirect http-status-code-301

我们有一堆子网站。我们正在更改这些网站的结构,因此它们是单个网站而不是多个WordPress安装。没问题。许多子域都具有权限,因此我们希望将这些子域中的301重定向添加到新的相应页面。但是,新页面父页面URL与旧的子域结构冲突。

现有子域名

sub1.example.com

重定向,现在是着陆页。

example.com/sub1

存在冲突,因为子域文件夹需要保留在原位才能执行重定向。

我正在寻找一种在子域中.htaccess创建重定向的方法,该方法与同名的新网页网址不冲突?

1 个答案:

答案 0 :(得分:1)

  

最好保留文件夹,以便我们可以向这些文件夹中的.htaccess文件添加301重定向

这是问题的一部分。这些子目录中的任何.htaccess文件都将覆盖父目录中的.htaccess文件(我假设的主要WP指令)。 (严格来说,它只是被覆盖的mod_rewrite指令。其他模块都是继承的。)

相反,请尝试以下方法:

(注意:这假设子域指向主域的文档根目录下的相应子目录。如果更改子域,则更简单,因此它也指向主站点的文档根目录。那么只需要一个(更简单的)重定向。)

  1. 删除子目录中的.htaccess(和index.php)文件,而是在父.htaccess文件中添加相应的指令。

  2. 靠近根.htaccess文件的顶部(在任何现有的WP指令之前):

    RewriteCond %{HTTP_HOST} ^(?:www\.)?(sub1|sub2|sub3)\.example\.com
    RewriteRule ^[^/]+/(.*) http://example.com/%1/$1 [R=302,L]
    

    这会将sub1.example.com/<anything>重定向到http://example.com/sub1/<anything>。初始请求中的www子子域是可选的。

    具体如何执行此操作可能取决于您拥有的子域数(以及格式)。如果你只有少数(你说你有3个),那么最好明确地命名这些,如上面的RewriteCond指令。

    在测试时使用302(临时)重定向更容易,因为它们没有被浏览器缓存。 (确保在测试之前清除浏览器缓存。)

  3. 您需要更新主WordPress指令,以便在访问这些裸子目录时包含其他规则/条件(例如http://example.com/sub1/)。由于/sub1是物理目录,WP不会路由请求,因为WordPress前端控制器专门忽略现有文件和目录。

    在WP .htaccess主文件中,您有以下指令:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress
    

    在上面的之后立即添加以下规则:

    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^(sub1|sub2|sub3)/?$ /index.php [L]
    

    这允许通过WordPress路由对裸子目录(例如http://example.com/sub1/)的请求。