2013-08-02 63 views
2

我需要重寫所有URL以特定格式與匹配querystring'd URL和其他一切應該去的index.php有效=虛假如何在htaccess中重寫所有內容,除了我的第一條規則?

我:

RewriteRule (^[^\s]{4})/([0-9]{4})/(winter|fall|summer)/([0-9]{4})/?$ index.php?valid=true&subject=$1&course=$2&semester=$3&year=$4 [NC,L] 
RewriteRule (.*)/?$ index.php?valid=false [NC,L] 

第一條規則是工作正常:4個字母,4個數字,秋季或冬季或夏季,4個數字。而且看起來第二條規則正在起作用,因爲當前所有內容都正在重定向到?valid=false頁面。但是,即使第一條規則接受的URL(即第二條註釋掉的第二條URL)通過[L]標誌,它們也應該被第二條規則所接受。

我做錯了嗎?

謝謝!

+1

也許看到http://stackoverflow.com/questions/6797998/rewriterule-last-l -flag-not-working – sgroves

+0

@sgroves謝謝 - 這是一個信息豐富的鏈接 - 下面的答案適用於我,但該鏈接中的rewritecond(或有用的流程圖)可能會解決另一個我正在進行不同重寫的問題。 – tsdexter

回答

0

這種替換代碼:

RewriteRule (^[^\s]{4})/([0-9]{4})/(winter|fall|summer)/([0-9]{4})/?$ index.php?valid=true&subject=$1&course=$2&semester=$3&year=$4 [NC,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*?)/?$ index.php?valid=false [NC,L] 

即執行第二個規則,只有當URI是不是已經index.php

+0

真棒,它的作品。但是,它引入了另一個我沒有想到的問題。它也正在重寫我的文件包含鏈接,如CSS/Images/JS,以便它們不返回正確顯示頁面所需的實際文件。我似乎通過在第二條規則之前包含以下RewriteCond來解決這個問題 - 這是正確的做法,而不會引入其他問題? 'RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d' – tsdexter

+0

確實需要2次檢查來避免重寫文件或目錄。我已經編輯了它。 – anubhava

+0

好,完美。再次感謝! – tsdexter