我如何改变斜线(/)连字符在.htaccess文件

uxh89sit  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(125)

我在我的网站上只使用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

gstyhher

gstyhher1#

由于.*表示任何字符0次或更多次,(.*)-(.*)$将导致新的URL合并捕获组,导致name = jhon-july-8date = 2023,因为模式会将所有字符贪婪地添加到第一个捕获组,直到最后一个-123abcd#%|_/结束$
为了匹配新的URL格式websitename/list/jhon-july-8-2023/,需要考虑连字符,以便将namedate值分成两个正则表达式捕获组。
根据您所需的结果,使用以下选项之一。
Regex模式的演示:https://3v4l.org/3qHUa

选项一:简单替换

此模式的工作方式与原始(.*)/(.*)类似,但可能会导致假阳性匹配,因为它没有正确考虑日期格式abcd-1-1234,并且可以自由匹配123-123-abc-abc-abc-abc作为示例。

RewriteRule ^list/(\w+)-(.*)/$ /list.php?name=$1&date=$2

字符串

  • ^list/以单词list开头,后跟一个正斜杠字符
  • \w+至少匹配1个或多个字母数字字符或下划线
  • .*匹配任何字符0次或更多次
  • /$需要在末尾添加正斜杠字符
    选项二:显式规则

此模式将通过仅接受以下值来帮助减少误报匹配:abcd-abcd-1-1234abcd-abcd-12-1234,末尾有或没有/

RewriteRule ^list/([a-z]+)-([a-z]+-\d{1,2}-\d{4})/?$ /list.php?name=$1&date=$2

  • ^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-1234123_AbC-123_AbC-12-1234

^list/(\w+)[\-/](\w+-\d{1,2}-\d{4})/?$ /list.php?name=$1&date=$2

  • ^list/以单词list开头,后跟一个正斜杠字符
  • \w+至少匹配1个或多个字母数字字符或下划线
  • [\-/]匹配一个连字符或正斜杠
  • \d{1,2}至少匹配1个且最多匹配2个数字字符
  • \d{4}正好匹配4个数字字符
  • /?$允许在末尾使用正斜杠字符作为可选字符

相关问题