2013-05-03 31 views
-1

最近,我的託管服務提供商已將其apache系統更新爲2.4.4。在這樣做,它已經導致我的表達引擎網站中斷,因爲我現在需要強制查詢字符串來運行網站。棄用PATH_INFO .htaccess規則損壞

從我瞭解你可以很容易地通過剛剛更新線在我的.htaccess規則來解決這個問題...

RewriteRule ^(.*)$ /index.php?/$1 [L] 

不幸的是,這種修復並不這麼簡單。

我的網站使用自定義表達引擎插件來檢測他們在使用IP到Nation模塊的世界的哪個區域。基本上發生的事情是,如果你來自美國,你會看到美國內容爲&的網站,如果你從其他任何地方將「國際」附加到URI的第一部分,該部分將根據第一部分顯示國際內容我們的URI

例如

http://www.example.com/segment_1/segment_2/segment_2 = US SITE 

http://www.example.com/international/segment_1/segment_2/segment_2 = INTERNATIONAL SITE 

當我試圖在查詢字符串添加到重寫規則進行的index.php它打破了國際網站,我不知道爲什麼。

RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 
RewriteRule /international/(.*)$ /index.php/$1 [L] 

添加「?」到RewriteRule ^(.*)$ /index.php?/$1 [L]修復美國網站,但打破國際網站,說它無法找到國際頁面。

添加「?」到RewriteRule /international/(.*)$ /index.php?/$1 [L]修復國際網站,但美國網站將無法正常工作,因爲它需要查詢字符串。

並將它添加到他們都不會工作。

我很明顯錯過了.htaccess中的某些內容來克服這個問題,但我似乎無法生成正確的語法。

任何想法?

回答

1

我要在這裏乘坐胡亂猜測,因此可能會完全無用......

RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 
RewriteRule /international/(.*)$ /index.php/$1 [L] 

問題看起來你重寫URL中的index.php添加?然後將其添加在再次爲國際 - 因此,當你添加「?」它既殺死了重寫。

因此,第一次重寫你需要排除國際,第二次確保它只是影響國際。

RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(international) 
RewriteRule ^(.*)$ /index.php?/$1 [L] 
RewriteCond %{REQUEST_URI} (international) 
RewriteRule /international/(.*)$ /index.php?/$1 [L] 

您可能需要重複第二部分的3個初始條件。

UPDATE

這得到它到底工作(感謝您指出我在正確的方向 - 盧克)

RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(international) 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} (international) 
RewriteRule ^(.*)$ /index.php/$1 [L] 
RewriteRule /international/(.*)$ /index.php?/$1 [L] 
+0

這almpost工作,這definetly指着我towrads正確的方向謝謝非常。我只需要添加'RewriteRule ^(。*)$ /index.php/$1 [L]'就好像國際因爲索引而已。PHP仍然需要可用+我確實需要重複3個初始條件以及第二部分。謝謝@彼得劉易斯 – 2013-05-03 13:53:39