mod_rewrite RewriteRule 不起作用

mod_rewrite RewriteRule 不起作用

这是该问题的后续问题:重写 URL - 如何获取主机名和路径?
以下是一份副本:mod_rewrite RewriteRule 不起作用

我得到了这个重写规则:

RewriteEngine On
RewriteRule ^(http://[-A-Za-z0-9+&@#/%=~_|!:,.;]*)/([-A-Za-z0-9+&@#/%=~_|!:,.;]*)\?([A-Za-z0-9+&@#/%=~_|!:,.;]*)$ http://www.xmldomain.com/bla/$2?$3&rtype=xslt&xsl=$1/$2.xsl

它似乎是正确的,而且正是我需要的。但它在我的服务器上不起作用。我收到 404 页面未找到错误。

mod_rewrite 已启用,因为以下简单规则运行良好:

 RewriteEngine On
 RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L]

你能帮我吗?

谢谢

答案1

根据文档,默认情况下

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

因此,您无法通过这种方式提取主机名或查询字符串。最简单的方法是在重写规则中使用%{HTTP_HOST}和服务器变量:%{QUERY_STRING}

RewriteRule ^/(.*)$ http://www.xmldomain.com/bla/$1?%{QUERY_STRING}&rtype=xslt&xsl=%{HTTP_HOST}/$1.xsl

编辑

如果您想测试完整的 URL,那么您可以RewriteCond这样使用(请注意,重写规则中的%符号而不是符号):$

RewriteCond %{HTTP_HOST}/%{REQUEST_URI}&%{QUERY_STRING} ...pattern...
RewriteRule . http://www.xmldomain.com/bla/%2?%3&rtype=xslt&xsl=%1/%2.xsl

相关内容