我一直在尝试使用.htaccess重写我正在编写的链接缩短服务。
我正在尝试实现以下目标:
网址 http://domain.com/keyhere:重定向到http://domain.com/link.php?key=keyhere
网址 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]
如果有人能指出我需要重写规则的正确方向,那就太棒了。
提前致谢。
答案 0 :(得分: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]
模式[^+]*
表示匹配零个或多个(*
)个字符,但不包括+
。当后面跟着$
(字符串的结尾)时,暗示字符串不包含+
。
要测试字符串末尾是否存在+
,我们会包含\+$
。 +
必须被转义,因为它是正则表达式中的特殊字符,但我们希望它的文字存在。因此,^([^+]*)\+$
表示捕获所有字符(+
除外,直至字符串末尾的+
。