这个问题可能重复。但我没有找到任何适用于我的解决方案。
我想重写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。但不是两级网址。即。 www.domain.com/projects/99
答案 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]