htaccess 用两个参数重写

问题描述 投票:0回答:1

我正在使用以下 htaccess 重写,它非常适合 1 个参数,例如 https://example.com/admin

RewriteEngine On

#Rewrite specific url rewriting page
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?key=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?key=$1

但我想要选择更深一层。 https://example.com/admin/profile

RewriteEngine On

#Rewrite specific url rewriting page
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?key=$1&keytwo=$2
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?key=$1&keytwo=$2

但这甚至没有影响我的index.php,让我拾取并翻译这些值。

.htaccess
1个回答
0
投票

您的匹配模式与带有两个参数的 URL 不匹配。查看模式中该参数允许的字符组:字母、数字、下划线和破折号。这不会匹配斜杠。因此,该模式不会匹配对中间带有破折号的 URL 的请求。

你需要调整你的搭配模式。尝试这样的事情:

RewriteEngine On
RewriteRule ^/?([a-zA-Z0-9_-]+)/?$ index.php?key=$1 [L]
RewriteRule ^/?([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ index.php?key=$1&keytwo=$2 [L]

第一个规则将请求的 URL 与包含字母、数字、下划线和破折号的单个参数进行匹配。它与 URL 中带或不带尾部斜杠的情况匹配。第二条规则对请求的 URL 执行相同的操作,其中两个参数由斜杠分隔。

如果模式匹配,

[L]
标志将终止该轮重写。没有一个模式修补已经重写的请求(匹配
index.php
),这就是为什么这不会以无休止的重写循环结束。

尾随

/?
接受尾随斜杠,而如果缺少斜杠,模式仍然匹配。这样你就不需要针对这两种情况制定两条规则。

前导

/?
使模式匹配绝对路径和相对路径。这意味着相同的规则可以用在中央 http 服务器的主机配置(出于多种原因首选)或分布式配置文件(通常称为
.htaccess
)中,如果没有配置,它可以作为最后一个选项派上用场。访问实际配置)。

© www.soinside.com 2019 - 2024. All rights reserved.