我正在尝试设置重写引擎,以便它将重定向:
http://www.url.com/some/parameter
http://www.url.com/index.php?page=some&topic=parameter
或类似的
我的。htaccess文件是这样的:
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteRule ^([^/]+)(?:/([^/]+))*/?$ index.php?param1=$1¶m2=$2 [L]
当我访问http://www.myurl.com/test/param时,它不能正确地添加参数(或者根本不工作)。当我打印所有$_GET条目时,它总是显示:
param1 -> index.php
param2 ->
//Code:
foreach($_GET as $k=>$v)
print($k . ' -> ' . $v . '<br/>');
我希望每个人都有一个想法。
编辑:我只是注意到它的工作,如果我写它:http://www.myurl.com/index.php/param1/param2,但我不希望index.php在那个URL。
您需要使用RewriteCond
来防止该规则第二次执行:
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)(?:/([^/]+))*/?$ index.php?param1=$1¶m2=$2 [L,QSA]
如果没有这两个RewriteCond
,你的规则也会执行第二次,因为模式仍然匹配/index.php
URI。
对于[L]
,您还需要指定[QSA]
,这意味着'查询字符串追加'。
RewriteRule ^([^/]+)(?:/([^/]+))*/?$ index.php?param1=$1¶m2=$2 [L,QSA]
http://httpd.apache.org/docs/2.2/rewrite/flags.html