2013-05-21 93 views
1

我目前有以下代碼將所有請求(文件除外)重定向到index.php,不幸的是我無法讓我的腳本工作,因爲發生了一些奇怪的MIME類型錯誤網址以斜槓結尾。將所有內容重定向到index.php並剝離最後一個斜槓

奇怪的部分是我的代碼輸出與兩個網址相同,但錯誤只出現在/結尾。

所以我在尋找一種方式,它的工作,現在只需withouth的斜線或只是解決MIME類型問題重定向所有請求,但我不知道是什麼原因造成?

<IfModule mod_rewrite.c> 
    Options +FollowSymlinks 
    # Options +SymLinksIfOwnerMatch 
    RewriteEngine On 

    # Redirect /index.php to/(optional, but recommended I guess) 
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.php 
    RewriteRule ^index.php/?(.*)$ $1 [R=301,L] 

    # Run everything else but real files through index.php 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php/$1?%{QUERY_STRING} [L] 
</IfModule> 

回答

2
<IfModule mod_rewrite.c> 
    Options +FollowSymlinks 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php/$1 [QSA,L] 
</IfModule> 

QSA =查詢字符串追加,它將保留查詢字符串。

如果index.php是一個文件,並且該文件存在,那麼它不會通過測試,所以不需要第一個RewriteCond塊。

+0

謝謝,但不幸的是,這並沒有解決我的問題 –

+0

什麼是不正確的? –

+0

我還有MIME類型問題 –

-1

您不能以斜線結束URL。 如果我理解你的權利,你正在使用的URL是

www.server.com/index.php/[more here] 

這是不正確的URL語法。你只能跟着.PHP用GET字符串 -

www.server.com/index.php?some_url_param=some_value 

someparametershere

+0

我的網址www.server.it/something/somethingElse"/"<--問題斜線 htaccess的規則轉換它www.server.itindex.php?/什麼/ somethingElse(斜線正確編碼) –

+0

對。你不能在文件中有一個目錄,這是沒有意義的。 「?」之後的任何內容需要使用編碼的變量格式 - 如果您嘗試傳遞腳本的目錄名稱以使用,那麼它需要像「index.php?directory =/something/somethingElse」之類的東西,其中斜槓正確地按照您以前的方式編碼說過。可能有更好的方法來做到這一點。 – dudewad

+1

用apache來做這件事其實很常見。我不確定它何時啓動,或者它是否支持其他Web服務器,但這至少在Apache上工作得很好。也就是說,'/ index.php/foo/bar'正確地將你路由到'index.php',你可以從那裏檢查'REQUEST_URI'。 – Dereleased

相關問題