0

在我的网站上,我向人们展示了两张定制摩托车的图片,并允许他们投票选出最喜欢的。当他们点击按钮投票时,我会传递获胜者 ID、失败者 ID 和时间。我使用 ColdFusion 来确定 ID 和时间是否合适。

我的问题是 .htaccess 文件。如果没有三个变量,我想将它们重定向到起始页。

--- is a good url
http://www.flyingpiston.com/rate/ 

--- is a good url
http://www.flyingpiston.com/rate/1502/1991/2013-4-2-4-43/

--- is NOT a good url
http://www.flyingpiston.com/rate/1502/1991/

--- my current settings
RewriteRule ^rate/([0-9]+)/([0-9]+)/(.*)/ /index.cfm?section=rate&winnerid=$1&loserid=$2&time=$3 [NS,L]
RewriteRule ^rate/([0-9]+)/([0-9]+)/ /index.cfm?section=rate [NS,L]
RewriteRule ^rate/ /index.cfm?section=rate [NS,L]

--- is not doing what I think it should do
RewriteRule ^rate/([0-9]+)/([0-9]+)/ /index.cfm?section=rate [NS,L]

如果第三个变量不存在,我认为上面的行应该重定向到起始页。

如何调整我的语句,以便有三个变量或没有变量传递?

要查看该页面,您可以访问此处:http : //www.flyingpiston.com/rate/ 仅使用前两个按钮进行投票。左上角的按钮传递三个变量。右上角的按钮只传递获胜者和失败者的 ID。

4

1 回答 1

1

它测试了完整的 URL,但实际上存在一些缺陷:

这条线

RewriteRule ^rate/([0-9]+)/([0-9]+)/(.*)/ /index.cfm?section=rate&winnerid=$1&loserid=$2&time=$3 [NS,L]

还匹配一个空字符串作为第三个匹配项,也许您应该将其更改为

RewriteRule ^rate/([0-9]+)/([0-9]+)/(.+)/ /index.cfm?section=rate&winnerid=$1&loserid=$2&time=$3 [NS,L]

此外,这一行:

RewriteRule ^rate/([0-9]+)/([0-9]+)/ /index.cfm?section=rate [NS,L]

匹配 URL 的开头而不是完整的 URL,请尝试将其更改为:

RewriteRule ^rate/([0-9]+)/([0-9]+)(/?)$ /index.cfm?section=rate [NS,L]

(也就是说,使用 line-placeholder 的 $ -end 匹配整个 URL,并在两种情况下都重写,最后有和没有斜线)。您可以在此处测试最后一个正则表达式。

于 2013-04-02T10:43:03.720 回答