mod_rewrite规则向所有请求除了一个具体的路径
-
09-06-2019 - |
题
我试图重定向所有请求我域到另一个领域使用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
不隶属于 StackOverflow