我正在构建一个具有 Multi-Tenancy 结构的WebScheduler,我要尝试做的是为每个买家分配一个指向我的应用程序的自定义网址。

因此,基本上,当用户从我这里购买许可证时,我将在网络服务器上创建一个自定义网址,如下所示:

http://webserver/foo.scheduler.com/login

其中foo是已购买许可证的用户的名称,而scheduler是URL的默认部分,另一个示例是购买者更多:
http://webserver/foo.scheduler.com/login
http://webserver/foo2.scheduler.com/login
http://webserver/foo3.scheduler.com/login

基本上有三个买家(我的客户),每个自定义终结点都允许我标识正确的数据库凭据,因为在我的逻辑中每个租户都有一个特定的数据库,以进行更多的数据组织。

实际上,我的应用程序位于此端点:
http://webserver/scheduler

我想知道是否可以将所有自定义URL指向http://webserver/scheduler,而无需在浏览器中重写url,因此例如,当用户真正转到http://webserver/foo.scheduler.com/login时是http://webserver/scheduler/login,但用户仍然继续看到http://webserver/foo.scheduler.com/login

怎么办呢?在我的.htaccess中,该内容位于应用程序文件夹的根目录下:
RewriteEngine On

RewriteBase /webscheduler/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

这使我可以重写索引的基本路径,并将跟踪分流到特定的 Controller 。

最佳答案

很高兴为您提供帮助。

为* .scheduler.com获取有效的SSL证书。如果要使它正常工作,您将需要它。您确定要使用HTTPS吗?您的其他URL不是HTTPS。然后,您将需要为* .scheduler.com设置虚拟主机,以使用该证书正常工作。 Only having:

<VirtualHost *:443>
    ServerAlias *.scheduler.com
    DocumentRoot "/var/www/html/progetti/scheduler"
</VirtualHost>

不会足够。您需要像在其他虚拟主机上一样在其中设置所有mod_ssl内容。您可以只使用该默认HTTPS主机,而不必添加其他HTTPS主机并对其进行修改。

首先要做的是让您的托管服务适用于https://*.scheduler.com/,然后将其指向正确的位置。

您的端点是http://webserver/scheduler是什么意思?这不是有效的域名。请阐明您的意思,我将提供更多信息来更新我的答案。代码是否在同一服务器上?

--

更新

因此,要在没有SSL的情况下执行此操作,请将以下内容添加到您的“000-default.conf”中:
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName www.scheduler.com
    ServerAlias *.scheduler.com
    UseCanonicalName off
    DocumentRoot /var/www/html/progetti/scheduler
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/html/progetti/scheduler>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

--

更新

要使http://webserver/foo.scheduler.com工作并服务/scheduler,请将其添加到已经存在的VirtualHost中。不是上面添加的新内容,而是顶部的原始内容。
RewriteEngine on
RewriteRule ^(/[^./]+\.scheduler\.com)(?:$|/(.*)$) /scheduler/$2

让我知道任何问题。如果您希望将其放入.htaccess中,则需要对其进行更新。

关于apache - 设置URL以重定向到特定URL,而无需重写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41763458/

10-11 06:53