立即运行项目,需要将特定页面投放到任何子域的所有匹配。这必须作为(反向?)代理,而不是重定向。
概述
几个(数十甚至数十万)用户将为他们设置一个URL,如下所示:
(some_user_name).example.tld
示例:john_smith_123.example.tld
。
环境
要求
(some_user_name).example.tld
时,所有用户都必须看到位于example.tld/directory/sub-directory/
的相同内容(包含解析子域值的代码的网络表单)。在该路径中的子目录内,我们有index.html
(默认情况下应该提供)和thank-you.html
文件,应该在表单提交时提供(确认页面)。 example.tld/assets/js/main.js
)来加载资源。(some_user_name).example.tld/thank-you
中向用户显示此地址,其中显示来自example.tld/directory/sub-directory/thank-you.html
的内容所以,这是对的:
(some_user_name).example.tld
- >当地址栏仍显示example.tld/directory/sub-directory/index.html
(some_user_name).example.tld
的网页内容
(some_user_name).example.tld/thank-you
这是错误的:
方案吗
我们一直在寻找和尝试答案(包括搜索和尝试几个堆栈溢出答案),但完全符合要求,我们陷入了僵局。
以下是我们尝试的一些解决方案:
到目前为止,我们遇到了一些在文档化解决方案(以及我们自己的尝试)中似乎很常见的问题。我们尝试了几种(实际上,有几种实现的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页面。
思想?