.htaccess包含两个字符串的动态URL

qfe3c7zg  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(92)

尝试使用2个字符串创建动态URL

string 1 = america
string 2 = mcdonals-burgers-so-celicious

我的.htaccess代码是

RewriteRule ^([a-zA-Z_-]+)-([a-zA-Z_-]+).html$ state.php?state=$1&category=$2 [L,QSA]

我想做america-mcdonals-burgers-so-delicious.html
但是这个URL 2字符串$_GET的结果是

echo $_GET['state'];
    echo $_GET['category'];

america-mcdonals-burgers-sodelicious

我肯定我犯了错误与regex代码...但我仍然没有找到我的答案...

x6yk4ghg

x6yk4ghg1#

^([a-zA-Z_-]+)-([a-zA-Z_-]+).html$

这个正则表达式有点不明确。您使用连字符作为两个参数之间的分隔符,但也允许每个参数都包含连字符。您希望分隔符在哪里(在第一个单词之后)并不是正则表达式的匹配方式,因为+正则表达式量词默认为 greedy,并尽可能多地使用。
因此,第一个捕获组匹配america-mcdonals-burgers-so,第二个捕获组匹配delicious,而不是您所期望的americamcdonals-burgers-so-delicious

如果“state”(第一个参数)仅包含一个字

解决此问题(并将连字符保留为参数分隔符)的唯一方法是,“state”(字符串1)参数只包含一个单词,因此可以从第一个捕获组中删除连字符。
例如:

^([a-zA-Z_]+)-([a-zA-Z_-]+)\.html$

(And请记住对html前面的文字点进行反斜杠转义。)

如果“state”(第一个参数)可以包含多个单词(即多个连字符)

但是,如果“state”可以由多个单词组成(因此需要多个 * 连字符 *),则需要使用不同的字符作为参数分隔符。例如,/america-two/mcdonals-burgers-so-delicious.html,因此需要使用^([a-zA-Z_-]+)/([a-zA-Z_-]+)\.html$之类的正则表达式。重要的是,参数 delimiter(在本例中为/)应该是唯一的。

相关问题