2013-12-17 26 views
0

我試圖將整個文件夾(包含數百頁)重定向到另一個域上的同一文件夾。 該網站使用,使用的RewriteCond產生漂亮網頁URL的一個CMS:重定向301子目錄結合使用RewriteCond

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 

這似乎與我的重定向衝突。 當我使用redirect 301 /folder/ http://www.site.invalid/folder/時,頁面被重定向到http://www.site.invalid/folder/index.php?q=folder/pagename.html,這將返回404.

任何人都可以指向正確的方向嗎?

+0

請提供您認爲是碰撞的其他RewriteCond – nrathaus

+0

您好nrathaus,沒有其他rewritecond。原始網站只有重定向,重定向目標網站只有上面的行。 – bolvo

回答

2

而不是使用301這樣的:

redirect 301 /folder/ http://www.site.invalid/folder/ 

嘗試使用301這個樣子,和其他的修改之前,把它放在:

RewriteRule ^/folder/(.*)$ http://www.site.invalid/folder/$1 [R=301,L] 

現在基本上會發生什麼是此規則首先運行,做301重定向(因爲它有一個R = 301標誌),並且由於它有一個最後的標誌(L),那麼它將停止服務器在此之後處理更多的重寫。

所以,你的htaccess文件看起來是這樣的:

RewriteEngine On 

RewriteRule ^/folder/(.*)$ http://www.site.invalid/folder/$1 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 
+0

讓我知道它是否有效 – Nick

+0

感謝Nick, 到目前爲止,感謝您的帖子,是: 'code'RewriteEngine on RewriteRule ^(。*)$ http://www.site.invalid/folder /index.php?q=$1 [L]'code' 現在頁面被重定向到http://www.site.invalid/folder/index.php?q = pagename,它已經顯示了頁面,但沒有'美化'的網址。 我不知道爲什麼我需要在新網站上使用rewriterule,它似乎沒有做任何事情,也沒有工作。 該解決方案不適用於其中包含根內容的站點。重定向轉到http://www.site.invalid/folderindex.php?q = pagename(文件夾後沒有斜槓!) – bolvo

+0

您在站點1上的重定向應重定向到漂亮的URL。然後,您應該在網站2上重寫該URL並將其發送到正確的頁面。 [參考:mod_rewrite,URL重寫和「漂亮鏈接」解釋](http://stackoverflow.com/questions/20563772/reference-mod-rewrite-url-rewriting-and-pretty-links-explained/20566547)可能是一些幫助 – Nick

1

保持你的整個的.htaccess這樣的:

RewriteEngine On 

RewriteRule ^(folder/.*)$ http://www.site.invalid/$1 [R=301,NC,NE,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?q=$1 [L,QSA] 

總體保持你的301條規則之前,其他包羅萬象的規則。

+0

感謝您的回覆。但我做到了這一點,它不起作用 – bolvo

+0

哪個網址不適合你?你可以在不同的瀏覽器中試用嗎? '/文件夾/'中還存在任何.htaccess嗎? – anubhava

+0

好的,要清楚:site1需要重定向到site2。 site1中的htaccess現在是'RewriteEngine on RewriteRule ^(。*)$ site.invalid/folder/index.php?q = $ 1 [L]'code' site2 has'code'RewriteEngine On RewriteCond%{REQUEST_FILENAME }!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteRule ^(。+)$ index.php?q = $ 1 [L,QSA]'code' 將上面的代碼添加到它什麼都不做。 – bolvo