使用多个参数的.htaccess重写URL

qzlgjiam  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(159)

这个问题可能是重复的。但我没有找到任何解决方案为我工作。我想重写网址,其中我有一个和两个级别的参数。第一个参数是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,但不是两级url,即www.domain.com/projects/99

ttvkxqim

ttvkxqim1#

您必须分别处理这些规则。规则前面的所有条件仅适用于一个紧接着的规则。您试图“链接”两个规则。第二个规则永远不可能匹配,因为第一个规则是一个改变了语法的捕获所有请求的规则,除此之外,您必须确保第一个规则不会捕获不需要的请求。同时考虑在模式中使用*还是+操作符。我建议使用+操作符,这样当为'page'或'subpage'请求空值时,就会有一个明确的错误消息。
因此,这可能更接近您正在寻找的内容:

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]

相关问题