2010-01-19 142 views
0

我希望能夠改寫這個的mod_rewrite忽略[L]

http://localhost/.../identicon/f528764d624db129b32c21fbca0cb8d6.png 

http://localhost/.../identicon.php?hash=f528764d624db129b32c21fbca0cb8d6 

,所以我增加了/.../.htaccess所以這是它:

RewriteEngine On 
RewriteRule ^resource/ - [L] 
RewriteRule ^identicon/(.+)\.png$ identicon.php?hash=$1 [QSA,L] 
RewriteRule ^(.*)$ index.php?t=$1 [QSA,L] 

由於某些原因,它不工作,因爲它將其重定向到index.php?t = identicon.php;即使L標誌被設置!爲什麼?

+0

它以什麼方式不起作用? – Matchu 2010-01-19 03:33:28

+0

@Matchu現在添加,它重定向到index.php而不是identicon.php。 – MiffTheFox 2010-01-19 03:36:30

回答

2

添加一個狀態到最後一條規則,以排除可以映射到現有文件的請求:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?t=$1 [QSA,L] 

這是必要的,因爲L flag生成新的URL作爲請求URL內部重定向:

但是請記住,如果RewriteRule生成內部重定向(其在每個目錄上下文重寫時經常發生),這將重新注入的再任務,並會導致處理從第一個RewriteRule開始重複。

0

(不正確的答案;左爲參考)


我只是想出什麼可能是問題 - 它的東西,我挫敗了很久。

根據您的服務器設置,很可能將identicon/xxx.png解釋爲identicon.php/xxx.png的請求,假設PHP擴展名是您想要的。嘗試去/index而不是/index.php - 如果它加載PHP文件,這是影響你的問題。

這是MultiViews Apache選項,它很愚蠢,但它必須特別啓用。進入您的站點配置文件並查看它的啓用位置,並將其刪除。

如果您沒有完全控制您的服務器配置,則以下內容可能在.htaccess中工作(具體取決於您的服務器配置)。

Options -Multiviews 
+0

我讓index.php將$ _GET ['t']的值轉儲到屏幕上:'index/a.png'打印'index/a.png',但'identicon/a.php'只是轉儲'identicon。 php'。另外,我嘗試將RewriteRule中的「identicon」更改爲其他內容,但仍然失敗。 – MiffTheFox 2010-01-19 04:03:26

+0

並且不,MultiViews未啓用。 – MiffTheFox 2010-01-19 04:19:06