如何在.htaccess中将URL斜杠改为连字符并正常获取数据?
解决URL斜杠改连字符后无法获取参数的问题
问题根源
你尝试的规则RewriteRule ^list/(.*)-(.*)/$ /list.php?name=$1&date=$2失效,是因为正则中的.*是贪婪匹配模式——它会把jhon-july-8-2023里最后一个连字符之前的所有内容(也就是jhon-july-8)都赋值给$1,只把2023留给$2,完全不符合你要的name=jhon、date=july-8-2023的参数分配逻辑。
正确的Rewrite规则
根据你的场景,提供两种可行方案:
方案1:针对name不含连字符的场景(适配你的示例)
用[^-]+匹配不含连字符的字符串作为name,剩下的部分全匹配为date:
RewriteRule ^list/([^-]+)-(.*)/$ /list.php?name=$1&date=$2
这个规则会精准把jhon匹配给$1,july-8-2023匹配给$2,完全符合你的需求。
方案2:兼容name含连字符的场景(可选)
如果未来你的name字段可能包含连字符(比如jhon-doe),可以通过匹配日期格式来精准分割参数:
RewriteRule ^list/(.*)-([a-z]+-[0-9]+-[0-9]{4})/$ /list.php?name=$1&date=$2
该规则会把最后一段符合英文月份-数字日期-4位年份格式的内容作为date,前面的所有内容作为name。
必做前置检查
确保你的.htaccess顶部已经开启Rewrite引擎:
RewriteEngine On
测试时可以在list.php中添加var_dump($_GET);,直接查看参数是否正确传递。
内容的提问来源于stack exchange,提问作者Torikul Islam
相关产品推荐
相关产品推荐

