2011-03-14 64 views
5

這是我的htaccess:mod_rewrite的和的.htaccess - 停止重寫,如果腳本/文件存在

RewriteEngine On 



# Stop if it's a request to an existing file. 

RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 

RewriteCond %{REQUEST_FILENAME} -d [NC] 

RewriteRule .* - [L] 



# Redirect all requests to the index page 

RewriteRule ^([^/])   /index.php   [L] 

現在,這一切都轉發到我的index.php腳本!如果腳本存在,它不會停止。任何人都知道爲什麼這不起作用?我到處尋找,但我不太瞭解mod_rewrite(就像我以爲!)。

這個問題已經出現,因爲我已經在<script>標記中指出了哪些指向我的web目錄中的.js文件,然後將其轉發給index.php腳本。 Web開發人員工具欄告訴我這一點。 :)點擊鏈接到firefox的視圖源窗口中的js文件也會顯示index.php輸出。

謝謝。

+0

要轉發所有的請求通常會導致404到index.php,是這樣嗎? – vbence 2011-03-14 23:38:15

+0

耶基本上:) – 2011-03-14 23:43:30

回答

8

這是因爲處理重寫規則後,整個過程將重新啓動新的url。每次使用更改的URL時,URL的處理可以一遍又一遍地重複規則,直到沒有更多的更改(沒有應用規則找到)。

你需要這樣的:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)   /index.php   [L] 

不要以爲規則的程序,它們是可以重疊的,必須儘可能具體每一個規則。

+0

嘿,謝謝你的迴應。不幸的是,你的代碼給我一個500服務器錯誤。 :( – 2011-03-14 23:30:00

+0

@Thomas Clayson我剛剛合併了你的規則,我稍微修改了一下,將每個不存在的請求轉發給'index.php'。 – vbence 2011-03-14 23:34:01

+0

啊我看到了,你的編輯是有意義的,而且似乎工作!不知道爲什麼我的dosen 't ...:/好吧,會堅持你的。:)謝謝 – 2011-03-14 23:37:09

1

我想你應該是這樣的首要條件之後添加[OR]:

RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule (.*) $1 [QSA,L] 
相關問題