URL重写匹配总是" index.php"

时间:2014-03-25 18:53:01

标签: php regex apache mod-rewrite redirect

我正在尝试设置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&param2=$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。

2 个答案:

答案 0 :(得分:1)

您需要使用RewriteCond来阻止此规则第二次执行:

Options +FollowSymLinks
Options +Indexes
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)(?:/([^/]+))*/?$ index.php?param1=$1&param2=$2 [L,QSA]

如果没有这两个RewriteCond,您的规则也会第二次执行,因为模式仍然匹配/index.php URI。

答案 1 :(得分:0)

使用[L]您还需要指定[QSA],这意味着'查询字符串追加'。

RewriteRule ^([^/]+)(?:/([^/]+))*/?$ index.php?param1=$1&param2=$2 [L,QSA]

http://httpd.apache.org/docs/2.2/rewrite/flags.html