1

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

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
)

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

4

1 回答 1

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]
于 2013-02-20T20:24:48.500 回答