2015-08-08 125 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

只需將您的新域指向站點根文件夾,而不是您的服務器根文件夾。