URL重写匹配总是“index.php”


URL rewriting match is always "index.php"

我正在尝试设置重写引擎,以便它将重定向:

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在那个URL。

您需要使用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。

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

RewriteRule ^([^/]+)(?:/([^/]+))*/?$ index.php?param1=$1&param2=$2 [L,QSA]
http://httpd.apache.org/docs/2.2/rewrite/flags.html