当前位置:  开发笔记 > 编程语言 > 正文

Apache mod_rewrite和PHP?argument = something

如何解决《Apachemod_rewrite和PHP?argument=something》经验,为你挑选了1个好方法。

我试图让我的网站上的所有HTML和PHP文件重定向到index.php,这样他们可以将常用的框架应用到它们,这是我编写的模板化解决方案,我发现它非常优雅.Anywho,我的PHP文件有问题,特别是那些后面有参数的文件.

我对PHP文件的常规规则如下:

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

这适用于任何没有参数的页面,但是你可以看到任何有PHP的文档

?argument=something

结束为:

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中使用的正则表达式风格与我以前使用的有很大不同,所以我确信这些是我做过的简单错误,但我似乎无法找到这种正则表达式的正确文档除了最基本的例子.

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



1> Paul Dixon..:

在你的规则中尝试qsa,它代表"查询字符串追加" - 然后mod_rewrite会将原始URL中的任何查询字符串附加到重写的URL

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

RewriteRule与查询字符串不匹配,这就是您的第二次尝试不起作用的原因.这是手册中的相关说明

模式将不与查询字符串匹配.相反,您必须使用带有%{QUERY_STRING}变量的RewriteCond.但是,您可以在替换字符串中创建包含查询字符串部分的URL.只需在替换字符串中使用问号,即表示应将以下文本重新注入查询字符串.如果要删除现有查询字符串,请仅使用问号结束替换字符串.要将新查询字符串与旧查询字符串组合,请使用[QSA]标志.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有