Apache2 mod_rewrite 规则
Apache2 mod_rewrite rules
如何重写静态文件请求
http://example.com/assets/img/logo.png
到
http://assets.example.com/img/logo.png
主站点重写规则
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 [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
根据您的评论,您只需要更改您在 RewriteRule
使用的正则表达式中捕获的内容。现在 </code> 是 <code>(.*)
中的值。您可以通过将 "assets" 添加到捕获组之前的路径来从中删除 "assets"。
变化:
RewriteRule ^(.*) http://assets.example.com [NC,L]
收件人:
RewriteRule ^assets/(.*) http://assets.example.com/ [NC,L]
如何重写静态文件请求 http://example.com/assets/img/logo.png 到 http://assets.example.com/img/logo.png
主站点重写规则
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 [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
根据您的评论,您只需要更改您在 RewriteRule
使用的正则表达式中捕获的内容。现在 </code> 是 <code>(.*)
中的值。您可以通过将 "assets" 添加到捕获组之前的路径来从中删除 "assets"。
变化:
RewriteRule ^(.*) http://assets.example.com [NC,L]
收件人:
RewriteRule ^assets/(.*) http://assets.example.com/ [NC,L]