MOD_REWRITE的行为不符合预期

时间:2012-01-24 22:53:23

标签: regex mod-rewrite

这不起作用:

RewriteRule ^([^/]+)([/]?)$ /index.cgi?l=$1 [NC,L]

这不起作用:

RewriteRule ^([^/]+)/?$ /index.cgi?l=$1 [NC,L]

.htaccess文件中没有其他规则。这是完整版本:

Options -Indexes
Options ExecCGI
AddHandler cgi-script .cgi .pl .q
ErrorDocument 500 /error500.cgi
ErrorDocument 404 /error404.cgi
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule ^([^/]+)/?$ /index.cgi?l=$1 [NC,L]

这可行,但这不是我想要的。

RewriteRule ^([^/]+)/([^/]+)$ /index.cgi?l=$1&a=$2 [NC,L]

我希望第一个斜杠和第二个目录都是可选的。为什么问号不会匹配0或1个实例,就像它应该的那样?我在这里吓到......

1 个答案:

答案 0 :(得分:0)

使用$,您指定它是文本的结尾,因此在/之后不会匹配任何内容。 (在正则表达式中,^指定字符串的开头,$指定结尾)

您可以移除$,然后它会使第二个参数成为可选项 - 听起来就像您正在寻找的那样。

试试看你的mod_rewrite是否正常工作:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [R,L]