.htaccess htaccess重定向所有内容,包括子域

.htaccess htaccess重定向所有内容,包括子域,.htaccess,redirect,.htaccess,Redirect,对于同一个web应用,我有3个域,因为我不想有重复的内容,所以我想将其他两个域重定向到主域 如果用户键入client_xyz.domain2.com,则应将其重定向到client_xyz.primarydomain.com 如果用户键入client\u xyz.domain2.com/folder/file/etc,则应将其重定向到client\u xyz.primarydomain.com/folder/file/etc 如果用户键入domain2.com/test/page,则应将其重定向到

对于同一个web应用,我有3个域,因为我不想有重复的内容,所以我想将其他两个域重定向到主域

如果用户键入
client_xyz.domain2.com
,则应将其重定向到
client_xyz.primarydomain.com

如果用户键入
client\u xyz.domain2.com/folder/file/etc
,则应将其重定向到
client\u xyz.primarydomain.com/folder/file/etc

如果用户键入
domain2.com/test/page
,则应将其重定向到
primarydomain.com/test/page

我认为这是避免谷歌对重复内容进行惩罚的最佳解决方案。
如果您认为有更好的解决方案(如DNS),请告诉我。

您可以在.htaccess文件中使用regex,因此设置301(永久移动)重定向

RedirectMatch 301 (^.*?\.|^)domain2.com(.*) $1.primarydomain.com$2
未经测试,但应该可以

[编辑]由于您的评论,下面的内容毫无用处,但我还是把它留在这里

或者,您可以在Apache配置文件中设置服务器别名。你可能有这样的想法:

ServerName primarydomain.com
DocumentRoot /var/www/html/mysite/
<Directory "/var/www/html/mysite/">
    AllowOverride All
</Directory>
ServerName primarydomain.com
DocumentRoot/var/www/html/mysite/
允许超越所有
将其更改为:

ServerName primarydomain.com
ServerAlias domain2.com
DocumentRoot /var/www/html/mysite/
<Directory "/var/www/html/mysite/">
    AllowOverride All
</Directory>
ServerName primarydomain.com
ServerAlias域名2.com
DocumentRoot/var/www/html/mysite/
允许超越所有

如果您可以使用mod_rewrite,这应该可以:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} (^.*?\.|^)?domain2\.com
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([a-z0-9-]+)/? http://$1.primarydomain.com [R=301,NC,L]

如果不是,那么,我可能不得不让比我更聪明的人来决定;-)

将此代码放入.htaccess文件中:

Options +FollowSymLinks -MultiViews
RewriteEngine on

RewriteOptions MaxRedirects=10

RewriteCond %{HTTP_HOST} ^(client_xyz\.)?domain2\.com$ [NC]
RewriteRule ^ http://%1primarydomain.com%{REQUEST_URI} [NE,R=301,L]

client_xyz也是一个变量。它可以是client_xyz,client_123。客户端测试。好的,请参阅编辑。不过,请确保您首先对其进行测试,因为我不是正则表达式专家,这只是我的想法,我没有访问apache配置文件的权限。你的htaccess给了我500个错误抱歉,格式弄乱了。删除换行符,使其成为一行。请注意,我已经做了一些更改,使其更加健壮。很抱歉,但仍然不起作用。我不再收到500错误,它只是不起任何作用。要使用变量client_xyz,请使用类似于:
RewriteCond%{HTTP\u HOST}^([^\.]+\)?domain2\.com$[NC]
谢谢@Gerben,这确实是可能的,但OP需要注意的是,它也会将类似于
admin.domain2.com
的内容重定向到
admin.primarydomain.com
,这可能是不需要的。当目录文件存在时不起作用,因此您应该删除第二次和第三次重写。此外,它仅适用于根文件夹,而不适用于任何子文件夹、根目录本身或根目录中的任何文件。努巴瓦的回答似乎还可以。