2011-07-14 52 views
0

我剛剛從另一個站長工作開始一個項目(我討厭修補其他的東西::傷心:),我有一些問題。首先我們使用表達式引擎1.x。HTaccess - Trailing slash + .php + anchors(ExpressionEngine)

我的問題:有在.htaccess一個斜線重定向,但我的用戶需要訪問只有一個PHP頁面(www.mydomain.com/mobile/index.php),但鏈接重定向到/index.php/,另一個問題是錨改爲以同樣的方式(www.mydomain.com/somepage/#anchor1)到/#anchor1/

所以我的問題是...有一種方法可以將異常放入尾部斜槓重定向代碼中?我的意思是我只需要在幾頁中解決它。請注意,我們的表達式引擎刪除所有的index.php鏈接,如www.mydomaine/contact /,www.mydomaine/about /,www.mydomaine/infos /等。

目前htaccess的trailling代碼:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule ^(.*)$ $1/ [L,R=301] 

P-S:我們有刪除的index.php太代碼:

RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5})$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} ^/(members|P[0-9]{2,8}) [NC] 
RewriteRule ^(.*)$ /index.php/$1 [L] 

THX的幫助!

回答

1

是否存在需要強制執行的URL 後跟斜槓的正確原因?如果沒有,我只想刪除重寫規則,你的問題就解決了:)

大多數ExpressionEngine網址將被工作,沒有尾隨斜線。

的最簡單的解決這個問題將是去除過度熱心尾隨斜線重定向,以及更加輕鬆的版本來替換它:

<IfModule mod_rewrite.c> 
    # Enable Apache's RewriteEngine 
    RewriteEngine On 

    # Add Trailing Slashes to URLs 
    RewriteCond %{REQUEST_METHOD} !=POST 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.+[^/])$ /$1/ [R=301,L] 

    # ExpressionEngine Remove index.php from URLs 
    RewriteCond %{REQUEST_METHOD} !=POST 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php/$1 [L] 
</IfModule> 

使用上面的代碼,example.com/mobile/index.php將不會改寫example.com/mobile/index.php/,也不會與錨點example.com/page/#anchor1

EE不知道像/mobile/mobile/之類的URI之間的差異,網絡分析應用和搜索引擎可能會考慮這些單獨的網頁。如果你正在開發一個靜態網站,這不是什麼大問題,因爲如果你試圖去到前一個URI(無尾隨機斜線),Apache會自動將客戶端重定向到後者(帶有斜線)。

但對於像EE,這裏的一切在URI index.php後由應用而不是阿帕奇處理的Web應用程序,這種重定向留給你。就像使用或不使用子域名的決定一樣,無論您選擇強制使用尾部斜線還是反之亦然,重要的是你執行一個或另一個。

旁註:在EE1,在由 ExpressionEngine產生URL被生成後斜槓;在EE2中,不會生成尾部斜線。 的例外是Structure Module,它輸出EE1和EE2中的尾部斜線 的URL