2015-08-08 133 views
2

我想我的重定向现有的域到新的(BOT的网站结构是相同的),我试图在.htaccess以下的.htaccess重定向到新的域名

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L] 

我的问题是,如果我尝试

olddomain.com/login.php

它重定向到

newdomain.com/public_html/login.php

这是不工作..任何人都可以帮助解决它。

(注:如果我只尝试域名重定向到完美的新域)

+0

这是否影响'login.php'?或者'olddomain.com/ '重定向到'newdomain.com/public_html/ '?尝试重定向到_any_其他域,你仍然在目标网址中获得'public_html'? (注意:使用302重定向进行测试,因为它们没有被缓存 - 301重定向被浏览器缓存,所以你必须确保你一直清除缓存!) – MrWhite

回答

1

与服务提供商讨论后,按照他们的指令,我用下面的代码,它完美的作品(按他们的信息,虚拟专用服务器是特殊情况)

感谢所有谁采取的努力来解决我的问题

RewriteEngine on 
RewriteOptions inherit 
RewriteCond %{HTTP_HOST} ^olddomain\.tld$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.olddomain\.tld$ 
RewriteRule ^(.*)$ "http\:\/\/www\.newdomain\.tld\/$1" [R=301,L] 
+0

如果您想查看指令的改进版本,可以查看我的更新。 – 5ervant

+2

感谢您的反馈。唯一重要的是'RewriteOptions inherit'指令。这是不寻常的。这意味着他们在.htaccess中使用mod_rewrite来进一步修改文件系统路径,以便看似“正确”处理文档根目录(mod_rewrite指令通常不会被继承)。 (当你看到'RewriteRule'替代品被格式化时,TBH会让你认为他们是否真的知道自己在做什么。) – MrWhite

2

然后你就可以使用这个RewriteRule指令:

RewriteRule ^public_html/(.*)$ http://www.newdomain.com/$1 [R=301,L] 

它只会反向引用的正则表达式(.*)排除“ public_html /“


很高兴看到解决您的问题的完整指令。无论如何,你可以改进和替代这些三线优化它们:

RewriteCond %{HTTP_HOST} ^olddomain\.tld$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.olddomain\.tld$ 
RewriteRule ^(.*)$ "http\:\/\/www\.newdomain\.tld\/$1" [R=301,L] 

有了这两条线:

RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.tld$ 
RewriteRule ^(.*)$ http://www.newdomain.tld/$1 [R=301,L] 

这是他们写的,在我的视线的最佳方式..

+0

它会导致发布数据的问题 –

+0

@ChiragNandaniya如何? – 5ervant

3

只需将您的新域指向站点根文件夹,而不是您的服务器根文件夹。