2012-08-17 99 views
1

我一直在嘗試使用.htaccess重寫我寫的鏈接縮短服務。.htaccess/ModRewrite問題

我試圖實現以下目標:

網址:http://domain.com/keyhere:重定向到http://domain.com/link.php?key=keyhere

網址:http://domain.com/keyhere+:重定向到http://domain.com/analytics.php?key=keyhere

我已經實現了第一個,但我無法將其重定向到尾部+

M y代碼是:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !# 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ link.php?key=$1 [L] 

如果任何人都可以用正確的方向指向我所需的重寫規則,那就太好了。

在此先感謝。

回答

1

(.*)是貪心,所以你將需要相匹配的+

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
# Also added non-existing directory condition 
RewriteCond %{REQUEST_FILENAME} !-d 
# What's this for?? 
#RewriteCond %{REQUEST_URI} !# 

# Match everything up to + ,followed by + first... 
RewriteRule ^([^+]*)\+$ analytics.php?key=$1 [L] 

# Next rule matches everything when there is no + 
RewriteRule ^([^+]*)$ link.php?key=$1 [L] 

圖案[^+]*表示匹配零個或多個(*)字符直到但不包括+第二規則。當後面緊跟$(字符串末尾)時,暗示該字符串不包含+

爲了測試在字符串末尾存在+,我們然後包括\+$+必須轉義,因爲它是正則表達式中的一個特殊字符,但我們希望它的字面存在。因此^([^+]*)\+$意味着捕獲所有字符(除++在字符串的盡頭。

+0

完美。謝謝你一百萬次了!現在時間對我來說,試圖瞭解它!:) – 2012-08-17 14:07:42

+1

' ^([^ +] *)\ + $'是正則表達式。 '^'表示字符串的開頭,'[^ +]'表示「任何不是加號的字符」,「*」表示「重複0次或更多次」,最後'\ +'表示字符「加「,並且它必須被轉義,因爲它在正則表達式中經常使用。最後,'$'表示「字符串的結尾」。 – h2ooooooo 2012-08-17 14:10:02