优化.htaccess中的漂亮网址

时间:2010-01-08 15:53:58

标签: regex apache .htaccess mod-rewrite friendly-url

这是我使用的代码,

<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/来检查此内容。

3 个答案:

答案 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)

非常简单的修改:

 ^([^/]+)/?([^/]*)