在Apache 2.4.7

时间:2017-07-21 17:53:03

标签: apache .htaccess apache2 ubuntu-14.04 apache2.4

立即运行项目,需要将特定页面投放到任何子域的所有匹配。这必须作为(反向?)代理,而不是重定向。

概述

几个(数十甚至数十万)用户将为他们设置一个URL,如下所示:

(some_user_name).example.tld

示例:john_smith_123.example.tld

环境

  • Ubuntu 14.04 Apache 2.4.7
  • HTML / CSS / JS
  • 没有服务器端脚本(允许)

要求

  1. 访问(some_user_name).example.tld时,所有用户都必须看到位于example.tld/directory/sub-directory/的相同内容(包含解析子域值的代码的网络表单)。在该路径中的子目录内,我们有index.html(默认情况下应该提供)和thank-you.html文件,应该在表单提交时提供(确认页面)。
  2. 在index.html页面上,我们有js代码来解析子域值,并使用魔术来显示针对该用户个性化的一些内容。只要子域存在于地址栏中,它就会起作用。
  3. 我们还有一些j必须能够通过引用位于根域中的资产(例如example.tld/assets/js/main.js)来加载资源。
  4. 在提交表单后,我们希望在地址栏(some_user_name).example.tld/thank-you中向用户显示此地址,其中显示来自example.tld/directory/sub-directory/thank-you.html的内容
  5. 所以,这是对的:

    • 用户转到(some_user_name).example.tld - >当地址栏仍显示example.tld/directory/sub-directory/index.html
    • 时,用户会看到(some_user_name).example.tld的网页内容
    • 用户然后提交表单(大概)并看到(some_user_name).example.tld/thank-you

    这是错误的:

    • (some_user_name).example.tld - >重定向到 example.tld / directory / sub-directory / index.html(显示在地址中 巴)。

    方案吗

    我们一直在寻找和尝试答案(包括搜索和尝试几个堆栈溢出答案),但完全符合要求,我们陷入了僵局。

    以下是我们尝试的一些解决方案:

    到目前为止,我们遇到了一些在文档化解决方案(以及我们自己的尝试)中似乎很常见的问题。我们尝试了几种(实际上,有几种实现的2-3种不同的变体)。

    所以,为了保持这一点,这是最后两次尝试:

    这是我们最接近的地方:

    <VirtualHost *:80>
        ServerName example.com
        DocumentRoot /var/www/example.com
        DirectoryIndex index.html
        ProxyRequests Off
        <Proxy *>
             Order deny,allow
             Allow from all
        </Proxy>
    
        RewriteEngine On
    
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName mailfunnel.example.com
        ServerAlias *.example.com example.com
        DocumentRoot /var/www/example.com/direct-mail/personal-debt-settlement/
        DirectoryIndex index.html
        ProxyRequests Off
        <Proxy *>
             Order deny,allow
             Allow from all
        </Proxy>
    
        RewriteEngine On
    
    </VirtualHost>
    

    这显示了正确的html内容,但所有js / css都被破坏了(因为这些被编码为相对链接,例如/assets/js/main.js)。

    我们不想使用绝对URL,因为此页面内容可能在dev和uat环境(以及生产)上提供。

    此外,虽然我们可以复制该资产文件夹,但我们不希望复制&amp;将代码保存在两个地方。

    这是我们之前尝试过的非工作设置:

    <VirtualHost *:80>
        ServerName example.com
        ServerAlias *.example.com
        DocumentRoot /var/www/example.com
        DirectoryIndex index.html
        ProxyRequests Off
        <Proxy *>
             Order deny,allow
             Allow from all
        </Proxy>
    
        RewriteEngine On
    
        RewriteCond %{HTTP_HOST}/%{REQUEST_URI} ^(.*)\.example\.com/(.*)$
        RewriteRule (.*)    "http://example.com/directory/sub-directory/" [P]
    </VirtualHost>
    

    但是,(any_subdomain).example.tld会返回404页面。

    更改

    RewriteRule (.*)    "http://example.com/directory/sub-directory/" [P]
    

    RewriteRule (.*)    "http://example.com/directory/sub-directory/index.html" [P]
    

    导致重定向到http://example.com/directory/sub-directory/index(显示地址栏中生成的完整路径)和“未找到 - 在服务器上找不到请求的URL /目录/子目录/索引”错误。

    .html移除index.html会导致与之前相同的404页面。

    思想?

0 个答案:

没有答案