【问题标题】:Apache2 mod_rewrite rulesApache2 mod_rewrite 规则
【发布时间】:2018-02-03 03:30:37
【问题描述】:

我如何重写静态文件请求,例如 http://example.com/assets/img/logo.pnghttp://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$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

【问题讨论】:

  • 我不相信您可以使用mod_rewrite 进行跨域重写。我建议改为查看mod_proxy 并执行proxy_pass
  • 我能够将所有 /assets/img/logo.png 等重写为 assets.example.com/assets/img/logo.png 。唯一的问题是重复的'/assets/'

标签: apache .htaccess mod-rewrite virtualhost


【解决方案1】:

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

变化:

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

收件人:

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

【讨论】:

    猜你喜欢
    • 2011-11-25
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多