我想要做的是一个非常简单的想法,但不知何故它不起作用。我需要这个重写规则才能工作:
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
)
我想知道这里有什么问题?
答案 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]