mod_rewrite,如何正确地重写链接

时间:2014-01-14 00:21:20

标签: php perl apache .htaccess mod-rewrite

我正在尝试重写我网站上的链接。 重写之前可能的链接以及重写后我想看到的内容:
/index.pl?mode=users&action=add - /users/add/
/index.pl?mode=streets&action=edit&id=7 - /streets/edit/7
/index.pl?mode=users&action=info&id=7 - /users/info/7

.htaccess内容:

RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(jpe?g|gif|bmp|png|tiff|css|js)$ [NC]
RewriteRule ^([A-Za-z0-9-]+)/((edit|delete|info))/([0-9]+)$ index.pl?mode=$1&action=$2&id=$3 [L]
RewriteRule ^([A-Za-z0-9-]+)/((add))/?$ index.pl?mode=$1&action=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/?$ index.pl?mode=$1 [L] 

/users/add//street/add/工作正常,但是......

问题:
/users/edit/xx - 我无法在perl脚本中接受ID。为什么?
/users/info/xx - 我甚至无法访问信息部分/?mode=users&action=info&id=7页面(必须显示包含错误ID的空白表)

顺便说一句......我的网站有'切换'结构。我的意思是如果模式是用户,那么它加载“users.pl”,如果mode = streets加载“streets.pl”等。关于第二个问题 - 确定我在users.pl上有信息部分!链接/?mode=users&action=info&id=7完美无缺。

p.s。:添加了php-tag,因为它不是'perl'问题,但php等于perl,所以php-followers也可以帮助我
p.p.s:为我不太好的英语而烦恼。

1 个答案:

答案 0 :(得分:1)

你有太多的括号,这使得你的反向引用一个接一个:

RewriteRule ^([A-Za-z0-9-]+)/(edit|delete|info)/([0-9]+)$ index.pl?mode=$1&action=$2&id=$3 [L]
RewriteRule ^([A-Za-z0-9-]+)/(add)/?$ index.pl?mode=$1&action=$2 [L]

这两条规则在((edit|delete|info))((add))周围括号太多(虽然“添加”不受影响,因为$ 2正确地反向引用它。)