我试图重定向所有请求我域到另一个领域使用mod_rewrite在Apache2.2虚拟主机宣言》。有一个例外--我想所有的请求 /audio 路径 要重新定向。

我已经写了一个重写过和RewriteRule做到这一点,但它并不完全正确的,我不知道为什么。经常表达包含一个负面的先行string"/音",但是由于某种原因,这并不匹配。这里的定义:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net(?!/audio) [NC]
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]

如果我改变重写过:

RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net/(?!audio) [NC]

(即把斜线之外的消极的前瞻部分),然后它的工作原理,但缺点是请求mydomain.net 没有一个后削减将不会重新定向。

任何人都可以指出的是什么,我做错了什么?

(注:角括号域在RewriteRule位上正在加入过StackOverflow.com -他们是不存在的实际代码!)


这里的规则:

<VirtualHost *:80>
ServerAdmin me@mydomain.net
DocumentRoot "/var/www/mydomain.net/htdocs"
ServerName www.mydomain.net
ServerAlias mydomain.net

RewriteEngine on
RewriteCond {REQUEST_URI} !^/audio
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
RewriteLog logs/mod_rewrite_log
RewriteLogLevel 3

ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>

谢谢@茂丘西奥-这非常有意义,但它仍然似乎不到工作。

这是什么mod_rewrite日志说当我的请求 http://mydomain.net/audio/something.mp3:

(2) init rewrite engine with requested uri /audio/something.mp3
(3) applying pattern '^(.*)$' to uri '/audio'
(2) rewrite '/audio' -> 'http://www.newdomain.net/'
(2) explicitly forcing redirect with http://www.newdomain.net
(1) escaping http://www.newdomain.net for redirect
(1) redirect to http://www.newdomain.net [REDIRECT/301]

由于REQUEST_URI不会开始 /audio 我希望RewriteRule被忽略。

有帮助吗?

解决方案

该HTTP_HOST仅包含的主机名称,而不是路径的网址的请求。

RewriteCond %{REQUEST_URI} !^/audio

应该是所有你需要的。

另外,你可以得到"调试"的信息改写发动机下,它真的有用看到你的条件和规则是匹配:

RewriteLog /path/to/log/file
RewriteLogLevel 3
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top