尝试使用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代码...但我仍然没有找到我的答案...
1条答案
按热度按时间x6yk4ghg1#
这个正则表达式有点不明确。您使用连字符作为两个参数之间的分隔符,但也允许每个参数都包含连字符。您希望分隔符在哪里(在第一个单词之后)并不是正则表达式的匹配方式,因为
+
正则表达式量词默认为 greedy,并尽可能多地使用。因此,第一个捕获组匹配
america-mcdonals-burgers-so
,第二个捕获组匹配delicious
,而不是您所期望的america
和mcdonals-burgers-so-delicious
。如果“state”(第一个参数)仅包含一个字
解决此问题(并将连字符保留为参数分隔符)的唯一方法是,“state”(字符串1)参数只包含一个单词,因此可以从第一个捕获组中删除连字符。
例如:
(And请记住对
html
前面的文字点进行反斜杠转义。)如果“state”(第一个参数)可以包含多个单词(即多个连字符)
但是,如果“state”可以由多个单词组成(因此需要多个 * 连字符 *),则需要使用不同的字符作为参数分隔符。例如,
/america-two/mcdonals-burgers-so-delicious.html
,因此需要使用^([a-zA-Z_-]+)/([a-zA-Z_-]+)\.html$
之类的正则表达式。重要的是,参数 delimiter(在本例中为/
)应该是唯一的。