2011-08-10 52 views
0

我有一系列mod_rewrite指令(下面顯示爲代碼1),通過自定義PHP應用程序運行每個服務器請求。需要mod_rewrite條件和規則,以1虛擬主機上的「.org」替換「.com」

代碼1

Options +FollowSymLinks 
RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /app/core.php [L,NC,QSA] 

之前,我在mod_rewrites的最後一步,我需要改變,以mydomain.com任何請求mydomain.org。下面的代碼2顯示了我的想法,但它不起作用。該請求給我500內部服務器錯誤。

代碼2

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^mydomain\.com$ 
RewriteRule^http://mydomain.org%{REQUEST_URI} 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /app/core.php [L,NC,QSA] 

有人可以建議一下嗎?謝謝

回答

1

我asume您的網站是可以通過兩個域,但你希望所有請求到您的網站重定向到其中之一。那麼正確的代碼是:

RewriteCond %{HTTP_HOST} !^mydomain\.com$ [NC] 
RewriteCond %{HTTP_HOST} !^$ 
RewriteRule ^(.*)$ http://mydomain.org/$1 [R=permanent,L] 

您應該將該代碼直接放在重定向行之後。

第二行確保在沒有給定主機的情況下沒有重定向(以防止在這種情況下發生重定向循環)。

第三行中的[R = permanent,L]使其成爲永久重定向,並阻止任何進一步的規則處理。其他規則將在重定向發生後處理。


完整的文件將被:

Options +FollowSymLinks 
RewriteEngine on 
RewriteBase/

RewriteCond %{HTTP_HOST} !^mydomain\.com$ [NC] 
RewriteCond %{HTTP_HOST} !^$ 
RewriteRule ^(.*)$ http://mydomain.org/$1 [R=permanent,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /app/core.php [L,NC,QSA] 
+0

感謝@Chronial。根據你陳述的方式,你的假設是正確的。因此,沒有指令的整個snipit這個樣子: '選項+的FollowSymLinks RewriteEngine敘述 上 的RewriteCond%{HTTP_HOST}^MYDOMAIN \ .COM $ [NC] 的RewriteCond%{HTTP_HOST}^$ 重寫規則^(*!。 )$ http://mydomain.org/$1 [R = permanent,L] RewriteBase/ RewriteCond%{REQUEST_FILENAME}!-f RewriteRule ^(。*)$ /app/core.php [L,NC,QSA] ' –

+0

@Chronial ...我似乎無法將我的評論格式化爲可讀代碼,因此請查看我的修訂指令的下一個答案,並告訴我是否應該使用該解決方案。 –

+0

正如我所說的,你必須在** RewriteBase命令之後放置我的代碼**。更新我的答案以包含完整的代碼。 – Chronial

0
Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} !^mydomain\.com$ [NC] 
RewriteCond %{HTTP_HOST} !^$ 
RewriteRule ^(.*)$ http://mydomain.org/$1 [R=permanent,L] 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /app/core.php [L,NC,QSA] 
+0

這沒有奏效。 –