2017-04-15 48 views
1

例外我想使用友好的URL:如何創建在.htaccess

RewriteRule ^([A-Za-z0-9_-]+)/$ pages/$1.php [QSA,L] 

但在同一時間,我想/forum/folder從在.htaccess文件規則被排除在外。

我該怎麼做?

+1

'A-Za-z0-9_'是'\ w' – Deadooshka

回答

2
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)是負先行。

+0

沒有工作:( –

+0

請將您試過的代碼添加到您的問題中,如果您的'.htaccess'文件中有其他指令,則添加你的整個'.htaccess'文件 - 可能會有衝突。另外,在子目錄中是否還有其他'.htaccess'文件? – MrWhite

+0

由於你的現有指令已經排除了URL路徑如果在這個子目錄中有一個額外的'.htaccess'文件,那麼這可能是它不工作的原因,我已經更新了我的答案。 – MrWhite