2009-02-16 102 views
0

我试图让我的网站上的所有HTML和PHP文件通过index.php重定向,以便他们可以有共同的框架应用于他们,我编码的模板解决方案我发现很优雅。任何人,我遇到我的PHP文件问题,特别是那些后面有争论的问题。Apache的mod_rewrite和PHP?参数=东西

我的PHP文件定期规则如下:

RewriteCond %{REQUEST_URI} !index.php$ 
RewriteRule ^(.+).php$ index.php?page=$1&type=1 [NC,L] 

也能正常工作为没有任何参数页,但你可以看到,有

?argument=something 

末任何PHP文件up:

index.php?page=path/to/page?argument=something&type=1 

这不是一个可行的解决方案。现在,这里困扰我的是规则末尾的$,如果在.php之后有什么东西不应该导致它失败?

Anywho,我试图重写规则为:

RewriteRule ^(.+).php\?(.+)$ index.php?page=$1&type=1&$2 [NC,L] 

但根本完全不触发。看起来,mod_rewrite中使用的正则表达式与我以前使用的正则表达式大不相同,所以我确信这些都是我所做的简单错误,但我似乎无法找到像这种风格的体面文档的正则表达式,而不是最基本的例子。

任何人都可以告诉我我做错了什么吗?谢谢。

在您的规则,它的全称是“查询字符串追加”

回答

6

尝试QSA - 则说明mod_rewrite会从原来的URL添加任何查询字符串的URL重写

RewriteCond %{REQUEST_URI} !index.php$ 
RewriteRule ^(.+).php$ index.php?page=$1&type=1 [NC,L,qsa] 

重写规则不匹配对查询字符串这就是为什么你的第二次尝试不起作用。下面是从the manual

格局将不匹配 对查询字符串相关的注释。相反,您必须使用 %{QUERY_STRING}变量的RewriteCond。然而,您可以在 替换字符串中创建URL,其中包含 查询字符串部分。只需在替换 字符串内使用 问号,表示应将下列 文本重新注入 查询字符串中。如果要删除 现有的查询字符串,请使用 问号结束 替换字符串。要将新查询 字符串与旧字符串合并,请使用[QSA] 标志。

+0

耶!这就像一个魅力。我不知道它没有测试整个字符串。^_ ^ – 2009-02-16 09:10:41