2011-12-30 87 views
0

我有3个域,对于同一个网络应用程序,因为我不想重复的内容我想重定向其他两个域到主域。htaccess重定向所有内容,包括子域名

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

如果用户输入client_xyz.domain2.com/folder/file/etc,应将其重定向到client_xyz.primarydomain.com/folder/file/etc

如果domain2.com/test/page应该被重定向到primarydomain.com/test/page

用户类型我认为这是为了避免谷歌惩罚重复的内容的最佳解决方案。 如果您认为有更好的解决方案来处理这个问题(例如DNS),请告诉我。

回答

2

把这段代码放在你的.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] 
+1

要变量client_xyz,请使用类似于:'RewriteCond%{HTTP_HOST} ^([^ \。] + \。)?domain2 \ .com $ [NC]' – Gerben 2011-12-30 13:51:17

+1

谢谢@Gerben,这确实可行,但OP需要请注意,它也会将诸如“admin.domain2.com”之类的内容重定向到“admin.primarydomain.com”,这可能不是所期望的。 – anubhava 2011-12-30 14:41:48

0

你可以在.htaccess文件中使用正则表达式,所以设置一个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 
ServerAlias domain2.com 
DocumentRoot /var/www/html/mysite/ 
<Directory "/var/www/html/mysite/"> 
    AllowOverride All 
</Directory> 
+0

client_xyz也是一个变量。它可以是client_xyz,client_123。 client_test。 – AFRC 2011-12-30 12:33:04

+0

好吧,看看编辑。不过,请确保你先测试它,因为我不是一个正则表达式专家,这只是我的头顶。 – 2011-12-30 12:37:28

+0

我没有访问Apache配置文件。 你的htaccess给了我一个500错误 – AFRC 2011-12-30 12:39:49

0

如果你可以使用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] 

如果没有,好,我是可能将不得不把它留给比我聪明的人;-)

+0

当目录文件存在时不起作用,因此应该删除第二个和第三个rewritecond。此外,它仅适用于根文件夹,而不适用于任何子文件夹,或根目录本身或根目录中的任何文件。 nubhava的答案似乎没问题。 – Gerben 2011-12-30 13:54:37