2014-03-25 35 views
2

我试图建立RewriteEngine叙述所以它会重定向:URL重写匹配始终是 “的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,但我不想在URL的index.php。

回答

1

您需要使用RewriteCond防止这种规则来执行第2次:

Options +FollowSymLinks 
Options +Indexes 
RewriteEngine On 

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

在没有这些2 RewriteCond您的规则正在执行第二次也是因为模式仍然匹配/index.php URI。

+0

谢谢,它的工作原理。我如何将http://www.myurl.com/重定向到http://www.myurl.com/index.php?page=home? – Adura

+0

不客气。我建议为此创建一个新问题,因为这与当前的问题非常不同,并且由于格式问题而不便提示注释中的代码。 – anubhava

+0

我会谷歌,看看我是否找到适合我的东西,如果这没有帮助,我会创建一个新的问题。 – Adura