2010-02-03 65 views
5

我需要包括可選尾隨forwardslash,這是一個/在我的重寫規則的.htaccess正則表達式需要做結尾斜線可選

我至今是

RewriteRule ^([a-zA-Z0-9]+)$ u.php?$1|$2 

工作正常,例如http://foo.bar/abcde將重定向到http://foo.bar/u.php?abcde並處理可能存在的任何查詢字符串參數。

我需要做的就是採取http://foo.bar/abcde/(與後forwardslash)和重定向到http://foo.bar/u.php?abcde

所以,如果它的存在,我需要刪除從$ 1的最後斜槓在我的重寫規則。我該怎麼做呢?我是apache新手,嘗試了許多不同的正則表達式規則,但無法做到。

回答

14

只要把/?$之前在你的方式結束:

RewriteRule ^([a-zA-Z0-9]+)/?$ u.php?$1 

但我寧願建議你允許只有一個拼字(有或沒有斜線)和重定向另一個:

# remove trailing slash 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)/$ /$1 [L,R=301] 
# add trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ /$0/ [L,R=301] 
+0

@菲爾:不,那不可能。您可以做的唯一事情就是將其從其中刪除,或將其添加到所有請求中。 – Gumbo 2010-02-03 19:40:18

+0

實際上,對於我想要達到的目標而言,允許兩種拼寫都更有意義,所以我現在要使用兩個重寫規則,直到我完全理解您使用'RewriteCond'建議的內容。 – Phil 2010-02-03 19:40:46

+1

@Phil:這兩個條件只避免重定向可以映射到現有目錄('-d')或現有文件('-f')的請求。 – Gumbo 2010-02-03 19:46:46