2017-08-25 57 views
0

我如何重写静态文件的要求如 http://example.com/assets/img/logo.pnghttp://assets.example.com/img/logo.png的Apache2 mod_rewrite的规则

主站点重写规则

ServerName example.com 
    ServerAlias example.com 
    DocumentRoot /var/www/html/example.com/public/ 

    <Directory /var/www/html/example.com/public/ > 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride All 
     Order allow,deny 
     allow from all 
    </Directory> 

RewriteEngine on 
RewriteCond %{HTTP_HOST} !assets\.site\.com 
RewriteCond %{REQUEST_URI} \.(png|gif|ico|css|js|tiff|woff|woff2|ogg|mp3)$ [NC] 
RewriteRule ^(.*) http://assets.example.com$1 [NC,L] 

子域名资产是否工作正常

虚拟主机配置assets.example.com

ServerName  assets.example.com 
    ServerAlias assets.example.com 
    DocumentRoot /var/www/html/example.com/public/assets/ 

    <Directory /var/www/html/example.com/public/assets/ > 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride All 
     Order allow,deny 
     allow from all 
    </Directory> 

http://assets.example.com/img/logo.png给出了404 但如果我创建一个/var/www/html/example.com/public/assets/assets/然后http://assets.example.com/img/logo.png reutns 200

+0

我不相信你可以使用'mod_rewrite'做跨域重写。我会建议看看[mod_proxy](https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html),并做一个'proxy_pass' – Charles

+0

我能够重写所有/ assets/img/logo。 PNG等assets.example.com/assets/img/logo.png。唯一的问题是重复的“/ assets /” – erax

回答

0

根据您的评论,你只需要改变你在RewriteRule使用的正则表达式中捕获的内容。现在$1(.*)中的值。您可以通过将“资产”添加到捕获组之前的路径中来删除“资产”。

变化:

RewriteRule ^(.*) http://assets.example.com$1 [NC,L] 

要:

RewriteRule ^assets/(.*) http://assets.example.com/$1 [NC,L]