Double RewriteRule

时间:2013-09-20 17:15:59

标签: apache .htaccess mod-rewrite

我有这些重写规则:

Options +FollowSymLinks

RewriteEngine On
RewriteBase /
RewriteRule ([0-9A-Za-z_]+)/([0-9]+)/([0-9]+)$ /dab.php?banner=$1&mid=$3&iid=$2 [L]
RewriteRule ([0-9A-Za-z_]+)/([0-9]+)/([0-9]+)/(.+)$ /dab.php?banner=$1&mid=$3&iid=$2&url=$4 [L]

他们应该将我重定向到:

/dab.php?banner=$1&mid=$3&iid=$2 

如果只有2个斜杠,并且:

dab.php?banner=$1&mid=$3&iid=$2&url=$4

如果有3个斜杠。

相反,如果我添加第3个斜杠和后面的内容,它会给我找不到错误404。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您需要添加^以将匹配绑定到整个URI。正则表达式:([0-9A-Za-z_]+)/([0-9]+)/([0-9]+)$匹配3个斜杠,但是在第一个斜杠之后,这不是你想要的:

Options +FollowSymLinks

RewriteEngine On
RewriteBase /
RewriteRule ^([0-9A-Za-z_]+)/([0-9]+)/([0-9]+)$ /dab.php?banner=$1&mid=$3&iid=$2 [L]
RewriteRule ^([0-9A-Za-z_]+)/([0-9]+)/([0-9]+)/(.+)$ /dab.php?banner=$1&mid=$3&iid=$2$url=$4 [L]