Mod rewrite 重写条件不匹配?
我读过好几篇关于url重写的文章,但对我没什么帮助 基本上在网站上,我们有以“.html”(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}
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
可能不是正确的参数。想象一下(公认的非常结构化的)URLhttp://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
可能不是正确的参数。想象一下(公认的非常结构化的)URLhttp://www.domain.com/otherdir?subdomain.com
,它将重定向,尽管请求的文件不是您想要重定向的文件,但它恰好在查询字符串中有重定向,因此,在REQUEST_URI
中,mod_rewrite的Apache日志记录在版本2.4中发生了更改。当前: