2010-10-27 118 views
0

我有一個小問題,我們的網站上的一些規則的.htaccess - http://www.presencemultimedia.co.uk用的.htaccess重寫問題(從笨的URL刪除的index.php)

我們最近重新修建使用笨的網站。要使用漂亮的網址,我已經添加了一些行到我們的.htaccess文件如下:

RewriteEngine on 

# CodeIgniter rules (forwards requests to index.php) 
RewriteCond $1 !^(index\.php|images|robots\.txt|public) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

# rewrites path to our primary domain (www.presencemultimedia.co.uk) 
RewriteCond %{http_host} !www.presencemultimedia.co.uk$ 
RewriteRule ^(.*)$ http://www.presencemultimedia.co.uk/$1 [r=301,nc] 

第二重寫規則旨在確保域始終是我們的主域(www.presencemultimedia.co.uk)。

我遇到的問題是,如果網站被別名域訪問,例如, http://www.prmulti.com,URL被重寫到主域,但將/index.php/添加到路徑。

例如 - http://www.prmulti.com/about/應改寫爲http://www.presencemultimedia.co.uk/about/而不是http://www.presencemultimedia.co.uk/index.php/about

任何人都可以看到我要去哪裏錯了嗎?

乾杯,菲爾

+0

你試過編輯你的config.php文件嗎?你應該從$ config ['index_page']中刪除index.php – rabidmachine9 2010-10-27 13:04:40

+0

我做過了 - 沒有什麼區別。 – Phil 2010-10-27 14:40:50

回答

3

我有這個配置運氣:

RewriteEngine on 

# rewrites path to our primary domain (www.presencemultimedia.co.uk) 
RewriteCond %{http_host} !www.presencemultimedia.co.uk$ 
RewriteRule ^(.*)$ http://www.presencemultimedia.co.uk/$1 [r=301,nc,l] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L] 

如果域匹配的規則,重定向(但是使它的最後一個規則)。 然後在正確的域上,如果請求不是現有文件或目錄,則傳遞給代碼點火器。

+0

我真的工作 - 歡呼:)我不得不用CodeIgniter行代替最後2個RewriteCond行: RewriteCond $ 1!^(index \ .php | images | robots \ .txt | public) (排除一些請求被路由到index.php) 乾杯! – Phil 2010-10-27 15:57:26

+0

很酷。我嘗試了這兩個!-f /! - d條件(正如我之前使用過的那樣)在單個(圖像|公共...)進入這裏給了我一個500 - 不知道爲什麼。 – 2010-10-27 16:00:53

2

我本來以爲301再直接應高於你笨的規則,贈送:

RewriteEngine on 

# rewrites path to our primary domain (www.presencemultimedia.co.uk) 
RewriteCond %{http_host} !www.presencemultimedia.co.uk$ 
RewriteRule ^(.*)$ http://www.presencemultimedia.co.uk/$1 [r=301,nc] 

# CodeIgniter rules (forwards requests to index.php) 
RewriteCond $1 !^(index\.php|images|robots\.txt|public) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

我最近開發了一個網站,多站點的框架,這是我正在使用的重寫順序爲:域先,然後通過我的index.php指示結果。該理論對於像CodeIgniter這樣的現成框架應該是一樣的。

+1

這聽起來正確。觀察到的行爲與此解釋相符。在請求進入替代域名後,302'd到http://www.prmulti.com/index.php/然後301'd到http://www.presencemultimedia.co.uk/index.php //。你的第一條規則[L]將確保它是最後一條規則,所以之後不會達到任何規則。 – Garethr 2010-10-27 15:28:48

+0

嗯...現在www.prmulti.com返回301(本質上是任何不是www.presencemultimedia.co.uk的域名) - http://cl.ly/307e – Phil 2010-10-27 15:39:38

+0

您好Martin - Craig的代碼做了工作。據我所知,與您唯一的主要區別是L標誌添加到第一個重寫規則。不知道爲什麼這工作雖然... – Phil 2010-10-27 16:07:17