如何使这个重写规则有效?

时间:2013-02-20 20:01:26

标签: php apache mod-rewrite url-rewriting

我想要做的是一个非常简单的想法,但不知何故它不起作用。我需要这个重写规则才能工作:

RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-=]*)$ index.php?op=$1&$2 [L,NC]

我认为它几乎是自我解释但我希望规则将第一个正则表达式组作为op参数传递,并且第二个正则表达式组不会被传递给脚本。像这样:

  

http://example.org/view/?post_slug=awesome-apache-mods - >   http://example.org/index.php?op=view&post_slug=awesome-apache-mods

这里的问题是第一部分工作正常,意味着op参数设置正确但第二部分丢失。我的意思是文字迷失了。当我发出print_r($_GET)时,只有op参数。

Array
(
    [op] => view
)

我想知道这里有什么问题?

1 个答案:

答案 0 :(得分:1)

我使用preg_match_all测试了你的模式,它与URL不匹配,因为_未在模式中定义,但是当我添加_时,它与URL匹配:

$text = 'view/?post_slug=awesome-apache-mods';
$pattern = '/^([a-zA-Z0-9-]+)\/\?([a-zA-Z0-9_=-]*)$/';
preg_match_all($pattern, $text, $out);
print_r($out);

然后你的.htaccess模式应该是这样的:

^([a-zA-Z0-9-]+)/\?([a-zA-Z0-9_=-]*)$ [L,NC, QSA]

如果/ view是常量,最好使用它:

RewriteRule ^([a-zA-Z0-9_-=]*)$ index.php?op=view&$2 [L,NC, QSA]