使用.htaccess重写URL以获取多个参数

时间:2013-02-09 08:38:56

标签: .htaccess

这个问题可能重复。但我没有找到任何适用于我的解决方案。 我想重写URL,我有一个和两个级别的参数。第一个参数是p,第二个参数是sp

www.domain.com/home应指向www.domain.com/index.php?p=homewww.domain.com/projects/99应指向www.domain.com/index.php?p=projects&sp=99

我怎么办.htaccess?

目前我的htaccess如下:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?p=$1
RewriteRule ^([^/]*)/([^/]*)\$ index.php?p=$1&sp=$2 [L]

这个htaccess的问题是它正确指向一个级别的URL。即。,www.domain.com / home。但不是两级网址。即。 www.domain.com/projects/99

1 个答案:

答案 0 :(得分:36)

您必须单独处理规则。规则之前的所有条件仅适用于单个规则。该规则不涉及以下规则。你试图“链接”两个规则。第二个规则永远不可能匹配,因为第一个规则是一个改变语法的全能。除此之外,您必须确保第一条规则不会捕获不需要的请求。还要考虑是否要在正则表达式中使用*+运算符。我建议您使用+运算符,以便在为“页面”或“子页面”请求空值时有明确的错误消息。

所以这可能更接近你想要的东西:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ index.php?p=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ index.php?p=$1&sp=$2 [L]