我在我的网站上只使用PHP和MySQL。我遇到的问题GET URL更改斜线为连字符,但没有得到数据。
这是我的.htaccess文件代码
RewriteRule ^list/(.*)/(.*)/$ /list.php?name=$1&date=$2
字符串
当我像这样浏览我的网址websitename/list/jhon/july-8-2023/
这是好的,并获得数据.
但我需要改变第三斜线(jhon
后/
)连字符当我浏览这个网址数据不显示
websitename/list/jhon-july-8-2023/
型
我试过了,但不管用
RewriteRule ^list/(.*)-(.*)/$ /list.php?name=$1&date=$2
型
1条答案
按热度按时间gstyhher1#
由于
.*
表示任何字符0次或更多次,(.*)-(.*)$
将导致新的URL合并捕获组,导致name = jhon-july-8
和date = 2023
,因为模式会将所有字符贪婪地添加到第一个捕获组,直到最后一个-123abcd#%|_/
结束$
。为了匹配新的URL格式
websitename/list/jhon-july-8-2023/
,需要考虑连字符,以便将name
和date
值分成两个正则表达式捕获组。根据您所需的结果,使用以下选项之一。
Regex模式的演示:https://3v4l.org/3qHUa
选项一:简单替换
此模式的工作方式与原始
(.*)/(.*)
类似,但可能会导致假阳性匹配,因为它没有正确考虑日期格式abcd-1-1234
,并且可以自由匹配123-123-abc-abc-abc-abc
作为示例。字符串
^list/
以单词list
开头,后跟一个正斜杠字符\w+
至少匹配1个或多个字母数字字符或下划线.*
匹配任何字符0次或更多次/$
需要在末尾添加正斜杠字符选项二:显式规则
此模式将通过仅接受以下值来帮助减少误报匹配:
abcd-abcd-1-1234
或abcd-abcd-12-1234
,末尾有或没有/
。型
^list/
以单词list
开头,后跟一个正斜杠字符[a-z]+
至少匹配1个或多个小写字母字符[a-zA-Z]+
\d{1,2}
至少匹配1个且最多匹配2个数字字符\d{4}
恰好匹配4个数字字符/?$
允许在末尾使用正斜杠字符作为可选字符选项三:宽松显式规则
此模式将允许连字符
-
或/
正斜杠与websitename/list/jhon-july-8-2023/
或websitename/list/jhon/july-8-2023/
的URL格式一起使用,并允许在捕获组的日期部分的名称和月份中使用字母和/或数字组合。如:123_AbC/123_AbC-12-1234
或123_AbC-123_AbC-12-1234
型
^list/
以单词list
开头,后跟一个正斜杠字符\w+
至少匹配1个或多个字母数字字符或下划线[\-/]
匹配一个连字符或正斜杠\d{1,2}
至少匹配1个且最多匹配2个数字字符\d{4}
正好匹配4个数字字符/?$
允许在末尾使用正斜杠字符作为可选字符