.htaccess配置仅能获取URL首段,如何获取后续的数据库ID参数
.htaccess获取URL多段参数调整方案
当前配置无法获取完整路径的核心问题是RewriteRule末尾的标记[QSA, L]中逗号后多了空格,Apache不允许RewriteRule标记之间存在空格,该错误会导致规则匹配异常,仅能捕获到第一段路径。
方案1:保持原有逻辑,仅修复错误
将规则调整为以下内容,即可让url参数拿到完整的路径(比如访问/profile/12345时,$_GET['url']的值为profile/12345):
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
拿到完整路径后,你可以在PHP中用explode('/', $_GET['url'])把路径按斜杠拆分,取索引为1的元素即可得到第二部分的ID参数。
方案2:直接在重写规则中拆分两段参数
如果你的URL结构固定为/控制器/ID的两段格式,可以直接修改规则将两段参数分别捕获,不用在PHP中额外拆分:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 匹配两段路径的请求,直接拆分出控制器和ID参数 RewriteRule ^([^/]+)/([^/]+)$ index.php?controller=$1&id=$2 [QSA,L] # 兼容只有一段路径的请求 RewriteRule ^([^/]+)$ index.php?controller=$1 [QSA,L]
调整后直接在PHP中读取$_GET['id']即可拿到数字ID,读取$_GET['controller']即可拿到第一部分的路径内容。
内容的提问来源于stack exchange,提问作者justRyan
相关产品推荐
相关产品推荐

