我们有一堆子网站。我们正在更改这些网站的结构,因此它们是单个网站而不是多个WordPress安装。没问题。许多子域都具有权限,因此我们希望将这些子域中的301重定向添加到新的相应页面。但是,新页面父页面URL与旧的子域结构冲突。
现有子域名
sub1.example.com
重定向,现在是着陆页。
example.com/sub1
存在冲突,因为子域文件夹需要保留在原位才能执行重定向。
我正在寻找一种在子域中.htaccess
创建重定向的方法,该方法与同名的新网页网址不冲突?
答案 0 :(得分:1)
最好保留文件夹,以便我们可以向这些文件夹中的
.htaccess
文件添加301重定向
这是问题的一部分。这些子目录中的任何.htaccess
文件都将覆盖父目录中的.htaccess
文件(我假设的主要WP指令)。 (严格来说,它只是被覆盖的mod_rewrite指令。其他模块都是继承的。)
相反,请尝试以下方法:
(注意:这假设子域指向主域的文档根目录下的相应子目录。如果更改子域,则更简单,因此它也指向主站点的文档根目录。那么只需要一个(更简单的)重定向。)
删除子目录中的.htaccess
(和index.php
)文件,而是在父.htaccess
文件中添加相应的指令。
靠近根.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(临时)重定向更容易,因为它们没有被浏览器缓存。 (确保在测试之前清除浏览器缓存。)
您需要更新主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/
)的请求。