我正在尝试设置RewriteEngine,以便重定向:
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。
答案 0 :(得分:1)
您需要使用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。
答案 1 :(得分:0)
使用[L]
您还需要指定[QSA]
,这意味着'查询字符串追加'。
RewriteRule ^([^/]+)(?:/([^/]+))*/?$ index.php?param1=$1¶m2=$2 [L,QSA]