这是我使用的代码,
<IfModule mod_rewrite.c>
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([^/]+)/?([^/]+) index.php?user=$1&do=$2 [L]
</IfModule>
如果我给它abcd/1234
,它将首先捕获abcd
然后再捕获1234
作为第二个变量。但如果网址为abcd/
或abcd
,则第一次捕获保持不变,但第二次捕获变为d
。这将导致PHP代码本身没有问题,但如果它首先没有捕获它会更有效。
哦,澄清一下, index.php页面不需要第一次或第二次捕获。但如果它们存在,将改变其目的。
任何有关正则表达式代码的帮助都将受到赞赏,如果有任何改进或更有效地编写它,我将非常感谢知道!
非常感谢你:)
我使用此工具http://gskinner.com/RegExr/来检查此内容。
答案 0 :(得分:1)
第二部分($ 2)是非可选的,因为你写了[^/]+
。我会用^([^/]+)(?:/([^/]+))?
替换整个事物,这会导致以下结果:
abcd - &gt; $ 1 ='abcd'$ 2 =''
abcd / - &gt; $ 1 ='abcd'$ 2 =''
abcd / something - &gt; $ 1 ='abcd'$ 2 ='某事'
答案 1 :(得分:0)
规则中的问号以及第二个加号导致它以这种方式分割。您应该删除问号,因为您已经要求第二组中至少有一个字符。
修改强> 在这种情况下,请使用:
RewriteRule ^([^/]+)(/([^/]+))?$ index.php?user=$1&do=$3 [L]
答案 2 :(得分:0)
非常简单的修改:
^([^/]+)/?([^/]*)