mod_rewrite RewriteRule不工作

这是这个问题的后续: 重写URL – 如何获取主机名和path?
而这个副本: 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页面没有find错误。

mod_rewrite被启用,因为以下简单的规则工作正常:

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

你能帮我吗?

谢谢

根据文档,默认情况下

模式最初将与主机名和端口之后以及查询string之前的URL部分进行匹配。 如果您希望与主机名,端口或查询string匹配,请分别使用RewriteCond和%{HTTP_HOST},%{SERVER_PORT}或%{QUERY_STRING}variables。

所以你不能以这种方式提取主机名和查询string。 简单的方法是在重写规则中使用%{HTTP_HOST}%{QUERY_STRING}服务器variables:

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

编辑

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

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