2009-07-09 32 views
1

我在我的.htaccess以下改寫:mod_rewrite的重寫的東西它明確告知不能

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule \.(css|jpe?g|gif|png)$ - [L] 
RewriteRule ^index/error/([^/\.]+)/?$ index.php?error=$1 [L] 

正如你所知道的,它應該不會重寫任何的CSS/.JPG/.JPEG/.gif注意/.png文件。儘管如此,它是這樣做的。真奇怪的是,它下面的那一行,重定向/索引/錯誤/不管index.php?error = $ 1的行都完美無缺。我的正則表達式有什麼問題嗎?有一個更好的方法嗎?

TIA。在稍後的解決了這個問題多次嘗試後

編輯:

我居然發現一個不同的,(在我看來)更優雅,當然更簡單的方法來做到這一點。我的問題是我的文件包含一個指向我的CSS文件的指針,如href =「./ css/styles.css」。 styles.css文件永遠不會移動。所以,我只是將href元素改爲絕對URI(http://www.mysite.com/css/styles.css)而不是相對URI。問題解決了!感謝所有發貼尋求幫助的人。

+0

看起來沒問題。你能從你的Apache日誌文件中發佈一些條目來顯示發生了什麼嗎? – 2009-07-09 04:08:33

+0

哪個重寫規則被應用於css,jpg ...文件? – 2009-07-09 05:01:07

回答

0

我其實發現了一個不同的(在我看來)更優雅,更簡單的方法來做到這一點。我的問題是我的文件包含一個指向我的CSS文件的指針,如href =「./ css/styles.css」。 styles.css文件永遠不會移動。所以,我只是將href元素改爲絕對URI(http://www.mysite.com/css/styles.css)而不是相對URI。問題解決了!感謝所有發貼尋求幫助的人。

2

可以使用的RewriteCond避免將規則應用於該組的擴展,像

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{REQUEST_URI} !\.(css|jpe?g|gif|png)$ 
RewriteRule ^index/error/([^/\.]+)/?$ index.php?error=$1 [L] 

此外,你不提什麼請求失敗以及以何種方式,那將是很好的知道,如果這不足以解決你的問題(這很可能)。

+1

+1因爲我第一次玩URL重寫時遇到了這個問題(不使用RewriteCond)。 – 2009-07-09 04:09:26

1

當url被修改時,'last'規則在.htaccess中不是很有用 - 請參閱mod_rewrite tech。在那裏,你會看到這是因爲重寫發生在請求處理的後期,所以它知道目錄,但是重寫u​​rl時已經太晚了。它通過創建一個新的請求來解決這個問題,並且通過有效地否定「最後」標誌的相同規則再次處理新的請求。

我看不出這是如何適用於你的情況。 ' - '不應該是一個URL重寫。從this web site他們建議使用下面的命令來調試重寫,你應該明白爲什麼你的規則似乎被忽略。

You can debug mod_rewriting adding those two directives in httpd.conf: 
    RewriteLogLevel 9 
    RewriteLog "<path-to-log-file" 

正則表達式對我來說很好,我幾乎看到了a mod_rewrite example同一個。