Apache 重写规则

Apache 重写规则

朋友们,我已经为此工作了好几天,但我还是无法让它发挥作用。

我正在尝试在我的 Apache 服务器中执行 RewriteRule,但没有成功。

如果我使用像这样的简单 url,它就可以完美运行。

RewriteEngine On
RewriteRule ^(/.php/m/) htp://www.index.php

但如果我使用复杂的 url 则不起作用,如下所示:

RewriteEngine On
RewriteRule ^(/index.php?option=com_rsform&Itemid=8&lang=en) htp://www.index.php

有人知道为什么 apache 不能理解这个 url 吗,我错过了什么

index.php?option=com_rsform&Itemid=8&lang=en

答案1

使用 RewriteRule 匹配 URL 时,查询部分不包含在内,请参阅文档

什麼是匹配?

模式最初将与 URL 中主机名和端口之后、查询字符串之前的部分进行匹配。如果您希望与主机名、端口或查询字符串进行匹配,请分别使用带有 %{HTTP_HOST}、%{SERVER_PORT} 或 %{QUERY_STRING} 变量的 RewriteCond。

根据文档的建议,您可以使用 RewriteCond 表达式来匹配%{QUERY_STRING}

RewriteCond %{QUERY_STRING} ^option=com_rsform&Itemid=8&lang=en$
RewriteRule ^index.php$ http://www.index.php

请注意,这仅当查询字符串与你匹配的字符串完全相同时才有效。等效查询字符串(其中参数的顺序已更改) fioption=com_rsform&lang=en&Itemid=8将不匹配。因此在这种情况下,我认为你最好发送全部向您的 PHP 脚本发出请求,并查看$_GET并决定是否转发。

相关内容