14

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

www.domain.com/home应该指向www.domain.com/index.php?p=home 并且 www.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。但不是两级网址。IE。www.domain.com/projects/99

4

1 回答 1

42

您必须分别对待规则。规则之前的所有条件仅适用于单个规则。后续规则及其条件不涉及后续规则。您试图“链接”两条规则。第二条规则永远无法匹配,因为第一条规则是一个包罗万象的规则,它改变了语法。除此之外,您必须确保第一条规则不会捕获不需要的请求。还要考虑是否要在模式中使用*or+运算符。我建议您使用+运算符,以便在为“页面”或“子页面”请求空值时获得清晰的错误消息。

所以这可能更接近你正在寻找的东西:

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]
于 2013-02-09T09:06:45.123 回答