这个问题可能是重复的。但我没有找到任何适合我的解决方案。
我想重写 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
最佳答案
你必须分别对待规则。规则之前的所有条件仅适用于单个规则。以下规则不受先行规则及其条件的影响。你试图“链接”两个规则。第二个规则永远不可能匹配,因为第一个规则是一个改变语法的包罗万象的规则。除此之外,您必须确保第一条规则不会捕获不需要的请求。还要考虑是否要使用*
或 +
模式中的运算符。我建议你使用 +
运算符,以便在为“页面”或“子页面”请求空值时有明确的错误消息。
因此,这可能更接近您要查找的内容:
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]
关于.htaccess - 使用 .htaccess 为多个参数重写 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14786340/