提问人:Torikul Islam 提问时间:7/10/2023 最后编辑:MrWhiteTorikul Islam 更新时间:7/11/2023 访问量:67
如何在.htaccess文件中将斜杠(/)更改为连字符
How can I change slash (/) to hyphen in .htaccess file
问:
我只在我的网站上使用 php 和 mysql。我遇到了 GET URL 将斜杠更改为连字符但无法获取数据的问题。
这是我的.htaccess文件代码
RewriteRule ^list/(.*)/(.*)/$ /list.php?name=$1&date=$2
当我像这样浏览我的网址时,这很好,可以获取数据。websitename/list/jhon/july-8-2023/
但是当我浏览此 url 数据未显示时,我需要将第 3 个斜杠(之后)更改为连字符jhon
/
websitename/list/jhon-july-8-2023/
我试过这个,但不起作用
RewriteRule ^list/(.*)-(.*)/$ /list.php?name=$1&date=$2
答:
由于表示任何字符 0 或更多次都会导致新 URL 合并捕获组,从而产生 和 ,因为该模式贪婪地将所有字符添加到第一个捕获组,直到最后的最后一个。.*
(.*)-(.*)$
name = jhon-july-8
date = 2023
-123abcd#%|_/
$
为了匹配 的新 URL 格式,需要考虑连字符,以便将 和 值分隔为两个正则表达式捕获组。websitename/list/jhon-july-8-2023/
name
date
根据您想要的结果,使用以下选项之一。
正则表达式模式演示:https://3v4l.org/3qHUa
选项 1:简单替换
此模式的工作方式与原始模式类似,但可能会导致误报匹配,因为它无法正确考虑日期格式,并且可以自由匹配作为示例。(.*)/(.*)
abcd-1-1234
123-123-abc-abc-abc-abc
RewriteRule ^list/(\w+)-(.*)/$ /list.php?name=$1&date=$2
^list/
以单词开头,后跟正斜杠字符list
\w+
匹配至少 1 个或多个字母数字字符或下划线.*
匹配任何字符 0 次或更多次/$
末尾需要正斜杠字符
选项 2:显式规则
此模式将帮助减少误报匹配,方法是仅接受以下值: 或 ,末尾有或没有 。abcd-abcd-1-1234
abcd-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 个数字字符/?$
允许在末尾使用正斜杠字符作为可选字符
选项 3:宽松的显式规则
此模式将允许连字符或正斜杠使用 URL 格式 或 ,并允许在捕获组的日期部分的名称和月份中使用字母和/或数字组合。如: 或-
/
websitename/list/jhon-july-8-2023/
websitename/list/jhon/july-8-2023/
123_AbC/123_AbC-12-1234
123_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 个数字字符/?$
允许在末尾使用正斜杠字符作为可选字符
评论