1

我一直在尝试将 .htaccess 重写用于我正在编写的链接缩短服务。

我正在尝试实现以下目标:

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

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

我已经实现了第一个,但无法使用尾随 + 重定向它

我的代码是:

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

如果有人可以根据所需的重写规则为我指明正确的方向,那就太好了。

提前致谢。

4

1 回答 1

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]

该模式[^+]*意味着匹配零个或多个 ( *) 字符,但不包括 a +。当后面跟着$(字符串的结尾) 时,暗示字符串不包含+

为了测试+字符串末尾是否存在 ,然后我们包括\+$. +必须转义,因为它是正则表达式中的特殊字符,但我们希望它的字面意义存在。因此^([^+]*)\+$意味着捕获所有字符(+ 直到+字符串末尾的.

于 2012-08-17T14:05:24.503 回答