例外我想使用友好的URL:如何創建在.htaccess
RewriteRule ^([A-Za-z0-9_-]+)/$ pages/$1.php [QSA,L]
但在同一時間,我想/forum/folder
從在.htaccess
文件規則被排除在外。
我該怎麼做?
例外我想使用友好的URL:如何創建在.htaccess
RewriteRule ^([A-Za-z0-9_-]+)/$ pages/$1.php [QSA,L]
但在同一時間,我想/forum/folder
從在.htaccess
文件規則被排除在外。
我該怎麼做?
RewriteRule ^([A-Za-z0-9_-]+)/$ pages/$1.php [QSA,L]
...我想
/forum/folder
被排除
你RewriteRule
模式(即^([A-Za-z0-9_-]+)/$
)已經排除了URL路徑/forum/folder
,由於圖案不允許斜槓(目錄分隔符)在URL路徑的中間;只在最後。
所以,如果/forum/folder
仍然被路由,然後別的東西正在這樣做。如果在這個子目錄中有一個額外的.htaccess
(假設它是一個物理目錄),使用mod_rewrite,那麼你可能會遇到衝突。
否則,有幾種方法可以破例:
#1 - 排除所有文件和文件夾:如果你特別想要被重寫排除所有文件和文件夾(假設/forum/folder
是一個物理目錄),那麼你可以專門檢查這個,如果URL路徑沒有映射到文件或目錄,只能處理RewriteRule
。例如:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/$ pages/$1.php [L]
這裏不需要的QSA
標誌,由於從請求的查詢字符串被默認追加。只有當您在替代中指定查詢字符串並且您需要將其與請求上的查詢字符串合併時,您是否需要此標誌。正如Deadooshka在評論中提到的那樣,\w
是[A-Za-z0-9_]
的簡寫字符,所以這簡化了正則表達式。
#2 - 排除規則:使用你的文件要排除和簡單地停止處理的路徑相匹配開始的規則。例如:
RewriteRule ^forum/folder - [L]
如果請求的URL與/forum/folder
然後開始停止在這裏並沒有進一步的處理規則。
#3 - 否定的條件:包括一個否定 conditon(RewriteCond
指令)在規則本身。例如:
RewriteCond %{REQUEST_URI} !^/forum/folder
RewriteRule ^([\w-]+)/$ pages/$1.php [L]
這將只處理RewriteRule
請求的URL不/forum/folder
啓動。CondPattern上的!
前綴抵消了正則表達式。
#4 - 在RewriteRule
模式負前瞻:如果你只需要你想從這個規則中排除一個規則,一個URL,那麼你可以在RewriteRule
模式使用負先行 (正則表達式)。例如,爲了排除在上述指令中的URL /forum
:
RewriteRule ^((?!forum)[\w-]+)/$ pages/$1.php [L]
的(?!forum)
是負先行。
'A-Za-z0-9_'是'\ w' – Deadooshka