这是该问题的后续问题:重写 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