Apache localhost双重www.domain(不是主机)目录重写

时间:2016-09-09 22:25:40

标签: apache .htaccess mod-rewrite url-rewriting

我必须在某些情况下从主要业务域向客户端域提供公共访问权限。我正在努力让它首先在本地工作(.local.htaccess),因此只需要帮助本地系统的重写规则。虽然我测试了所有访问方式(192. ,127。等),但这些域主机(主机为localhost)。

请求的网址

https://localhost/Version-1.0/www.example1.com/www.example2.com/images/waldo.gif

文件服务器路径

https://localhost/Version-1.0/www.example2.com/images/waldo.gif

.local.htaccess位置

https://localhost/Version-1.0/.local.htaccess

一般代码我一直在修补:

RewriteEngine on
RewriteRule ^[.*/].*/(www.)+/images/(.*)$ $1/images/$2

我使用以下脚本目录(所有规则,但不是images目录)取得了成功(图像目录,即使是空的.htaccess文件):

RewriteEngine on
RewriteRule ^[^/].*/scripts(.+) scripts$1

2 个答案:

答案 0 :(得分:1)

尝试使用此规则作为.local.htaccess中的第一条规则:

RewriteEngine On

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(Version-1\.0)/www[^/]*/(www[^/]*/\S*)\s
RewriteRule ^ /%1/%2 [L,NE,R=301]

答案 1 :(得分:0)

好的,经过批次的修补后,我能够让重写(而非重定向)工作!

RewriteEngine On
RewriteRule ^.*/(www..*)/images/(.+) $1/images/$2

了解重写

当人们没有真正解释答案时,我讨厌,尤其是当Q& A远非简单时,约翰将解释这是如何工作的。对我来说,关键是可视化 Apache正则表达式的工作原理。下面的图片来自Apache mod_rewrite Introduction

Apache Rewrite Regex

  1. ^ ,在这里开始匹配。
  2. ,匹配任何字符。
  3. ,任意次。 (。任意次数匹配任何字符)。这减轻了我们不必担心目录/文件夹深度。)
  4. / ,目录边框。
  5. (www .. *),(括号)创建一个组,第一组分配给$ 1,第二组分配$ 2.等匹配以www.开头的目录,第二个句点匹配任何字符,并且立即*再次匹配任何字符(用于动态处理任何具有任何域名的目录)。
  6. / images / ,匹配 images 目录,我们不希望与任何其他资产目录匹配。
  7. (。+),同样是一个括号组,分配给$2。+ 可以任意次数匹配任何字符(对于此目录中请求的任何文件)。
  8. $ 1 / images / $ 2 ,这是规则的后半部分。第一次针对请求的URI进行测试,如果它与下半部分匹配则是服务器上请求的(假设它存在/可以找到)。分配的括号是我们如何移动事物,所以实质上我们在分配给$1的内容之前丢弃所有。文件名分配给$2(包括任何子目录)。
  9. 将(括号)赋值给$1$2等的概念并不困难,它确保正则表达式不仅能够正确匹配,而且还能动态匹配。这方面还需要具有经验的计划(例如,如何组织项目)。