我试图让我的网站上的所有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中使用的正则表达式风格与我以前使用的有很大不同,所以我确信这些是我做过的简单错误,但我似乎无法找到这种正则表达式的正确文档除了最基本的例子.
任何人都可以告诉我我做错了什么吗?谢谢.
在你的规则中尝试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]标志.