设置网址以重定向到特定网址而不重写

Aga*_*nMe 6 apache .htaccess mod-rewrite

我正在构建一个具有多租户结构的webscheduler,我正在尝试做的是为每个买家分配一个指向我的应用程序的自定义URL.

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

http://webserver/foo.scheduler.com/login
Run Code Online (Sandbox Code Playgroud)

foo购买许可证的用户的名称在哪里,并且scheduler是网址的默认部分,另一个示例包含更多买家:

http://webserver/foo.scheduler.com/login
http://webserver/foo2.scheduler.com/login
http://webserver/foo3.scheduler.com/login
Run Code Online (Sandbox Code Playgroud)

基本上有三个买家(我的客户),每个自定义端点允许我识别正确的数据库凭证,因为在我的逻辑中每个租户都有一个特定的数据库,用于更多的数据组织.

实际上我的应用程序位于此端点:

http://webserver/scheduler
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能指向所有自定义网址http://webserver/scheduler,而不是在浏览器中重写网址,所以例如当用户转到http://webserver/foo.scheduler.com/logintrue时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]
Run Code Online (Sandbox Code Playgroud)

这允许我重写索引的基本路径,并将跟踪分流到特定的控制器.

小智 3

很高兴为您提供帮助。

获取 *.scheduler.com 的有效 SSL 证书。如果你想让它发挥作用,你将需要它。您确定要使用 HTTPS 吗?您的其他 URL 不是 HTTPS。然后,您需要为 *.scheduler.com 设置虚拟主机,才能使用该证书正常工作。仅具有

<VirtualHost *:443>
    ServerAlias *.scheduler.com
    DocumentRoot "/var/www/html/progetti/scheduler"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

还不够。您需要在那里设置所有 mod_ssl 内容,就像在其他虚拟主机上一样。您可以只使用默认的 HTTPS 主机,而不是添加另一个主机,然后对其进行修改。

首先要做的就是让您的主机在 https://*.scheduler.com/ 上运行,然后将其指向正确的位置。

你的意思是你的终点是什么http://webserver/scheduler?这不是有效的域名。请澄清您的意思,我将用更多信息更新我的答案。代码在同一台服务器上吗?

--

更新

因此,要在没有 SSL 的情况下执行此操作,请将以下内容添加到“000-default.conf”中当前的内容之后:

<VirtualHost *:80>
    ServerAdmin localhost@gmail.com
    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>
Run Code Online (Sandbox Code Playgroud)

--

更新

要使http://webserver/foo.scheduler.com工作并提供 /scheduler 服务,请将其添加到已有的 VirtualHost 中。不是上面添加的新的,而是顶部原来的。

RewriteEngine on
RewriteRule ^(/[^./]+\.scheduler\.com)(?:$|/(.*)$) /scheduler/$2
Run Code Online (Sandbox Code Playgroud)

有任何问题请告诉我。如果您希望将其放入 .htaccess 中,则需要更新。