现在运行一个项目,需要为特定页面提供所有匹配的子域名。 这必须作为(反向?)代理,而不是作为redirect。
概观
几个(几十个甚至几十万个)用户将为他们设置一个URL,如下所示:
(some_user_name).example.tld
例如: john_smith_123.example.tld 。
环境
要求
(some_user_name).example.tld ,所有用户都必须看到位于example.tld/directory/sub-directory/的相同内容(具有parsing子域值的代码的Web表单)。 在该path的子目录中,我们有一个index.html (应该默认提供)和一个thank-you.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 这是错误的:
解决scheme?
我们一直在挖掘和尝试的答案(包括search和尝试几个堆栈溢出的答案),但相当符合要求,我们处于僵局。
以下是我们尝试的一些解决scheme:
到目前为止,我们遇到了一些在文档化解决scheme(以及我们自己的尝试)中似乎很常见的问题。 我们尝试了几个(实际上,几个实现的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环境(以及产品)上提供。
此外,虽然我们可以复制该资产文件夹,但我们不希望在两个地方复制和维护代码。
以下是我们之前尝试的非工作设置:
<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]
会导致redirect到http://example.com/directory/sub-directory/index (显示地址栏中的结果完整path),并显示“未find – 请求的URL /目录/子目录/索引不是在服务器上发现“错误。
从index.html删除.html导致与之前相同的404页面。
思考?