Mod rewrite 重写条件不匹配?

Mod rewrite 重写条件不匹配?,mod-rewrite,Mod Rewrite,我读过好几篇关于url重写的文章,但对我没什么帮助 基本上在网站上,我们有以“.html”(http://www.domain.com/page.html),我们还保留了一些其他子域内容(http://www.domain.com/subdomain.com) 所以我想知道:http://www.domain.com/subdomain.com 要重定向到:/www/subdomain.com/index.php 我试过这个,但有点问题: RewriteCond %{QUERY_STRING}

我读过好几篇关于url重写的文章,但对我没什么帮助

基本上在网站上,我们有以“.html”(
http://www.domain.com/page.html
),我们还保留了一些其他子域内容(
http://www.domain.com/subdomain.com

所以我想知道:
http://www.domain.com/subdomain.com
要重定向到:
/www/subdomain.com/index.php

我试过这个,但有点问题:

RewriteCond %{QUERY_STRING} !\.html$
RewriteCond %{QUERY_STRING} ^([^/.]+)\.([^/.]+)/?$
RewriteRule /www/%1.%2/index.php [L]
我想我误解了RewriteCond的用法,但我不知道如何正确使用它。 我错过了什么

谢谢,
Rob

这应该接近:

RewriteCond %{QUERY_STRING} !\.html$
RewriteRule ^([^/.]+)\.([^/.]+)/(.*) /www/$1.$2/index.php?file=$3 [QSA,NC,L]
注意,我添加了最后一部分作为
index.php
的查询参数


哦,顺便说一下:

  • 这是我们的维基
如果这还不够:

两个提示: 如果您不在托管环境中(=如果它是您自己的服务器,可以修改虚拟主机,而不仅仅是
.htaccess
文件),请尝试使用
RewriteLog
指令:它可以帮助您跟踪此类问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

我最喜欢的检查regexp的工具:


(别忘了选择ereg(POSIX)而不是preg(PCRE)!

这应该接近:

RewriteCond %{QUERY_STRING} !\.html$
RewriteRule ^([^/.]+)\.([^/.]+)/(.*) /www/$1.$2/index.php?file=$3 [QSA,NC,L]
注意,我添加了最后一部分作为
index.php
的查询参数


哦,顺便说一下:

  • 这是我们的维基
如果这还不够:

两个提示: 如果您不在托管环境中(=如果它是您自己的服务器,可以修改虚拟主机,而不仅仅是
.htaccess
文件),请尝试使用
RewriteLog
指令:它可以帮助您跟踪此类问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

我最喜欢的检查regexp的工具:


(别忘了选择ereg(POSIX)而不是preg(PCRE)!

谢谢,它很管用。除了第二行应该是RewriteRule,而不是Cond。干杯,RobI意识到它是有效的,但这部分:RewriteCond%{QUERY\u STRING}!\。html$不会停止html页面以输入重写规则(在该服务器上找不到请求的URL/www/page.html/index.php)。好的,我终于找到了。QUERY_STRING是在“?”之后传递的变量列表。因此,我不得不将其更改为REQUEST_URI,这实际上是我想检查的内容。我在研究自己的一些重写内容时偶然发现了这一点:在
RewriteCond
中尝试的通常事情是
REQUEST_FILENAME
REQUEST_URI
包含了
REQUEST_FILENAME
,其中包括
REQUEST_FILENAME
,但是也有
QUERY\u STRING
,因此,根据您想要执行的操作,
REQUEST\u URI
可能不是正确的参数。想象一下(公认的非常结构化的)URL
http://www.domain.com/otherdir?subdomain.com
,它将重定向,尽管请求的文件不是您想要重定向的文件,但它恰好在
查询字符串中有重定向,因此,在
REQUEST_URI
中,mod_rewrite的Apache日志记录在版本2.4中发生了更改。时事:谢谢,它很管用。除了第二行应该是RewriteRule,而不是Cond。干杯,RobI意识到它是有效的,但这部分:RewriteCond%{QUERY\u STRING}!\。html$不会停止html页面以输入重写规则(在该服务器上找不到请求的URL/www/page.html/index.php)。好的,我终于找到了。QUERY_STRING是在“?”之后传递的变量列表。因此,我不得不将其更改为REQUEST_URI,这实际上是我想检查的内容。我在研究自己的一些重写内容时偶然发现了这一点:在
RewriteCond
中尝试的通常事情是
REQUEST_FILENAME
REQUEST_URI
包含了
REQUEST_FILENAME
,其中包括
REQUEST_FILENAME
,但是也有
QUERY\u STRING
,因此,根据您想要执行的操作,
REQUEST\u URI
可能不是正确的参数。想象一下(公认的非常结构化的)URL
http://www.domain.com/otherdir?subdomain.com
,它将重定向,尽管请求的文件不是您想要重定向的文件,但它恰好在
查询字符串中有重定向,因此,在
REQUEST_URI
中,mod_rewrite的Apache日志记录在版本2.4中发生了更改。当前: