我正在构建一个具有多租户结构的webscheduler,我正在尝试做的是为每个买家分配一个指向我的应用程序的自定义URL。
所以基本上当用户从我那里购买许可证时,我会在我的网络服务器上创建一个自定义网址,如下所示:
http://webserver/foo.scheduler.com/login
其中foo
是购买许可证的用户的名称,而scheduler
是网址的默认部分,另一个例子包含更多买家:
http://webserver/foo.scheduler.com/login
http://webserver/foo2.scheduler.com/login
http://webserver/foo3.scheduler.com/login
基本上有三个买家(我的客户),每个自定义端点允许我识别正确的数据库凭证,因为在我的逻辑中每个租户都有一个特定的数据库,以便进行更多的数据组织。
实际上我的应用程序位于此端点:
http://webserver/scheduler
我想知道是否可以将所有自定义网址指向http://webserver/scheduler
,而无需重写浏览器中的网址,例如当用户转到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]
中,可以在应用程序文件夹的根目录中找到我的内容:
... onCreateView{
.....
notiList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
setListMultiSelectListener();
}
public void setListMultiSelectListener() {
notiList.setMultiChoiceModeListener(new MultiChoiceModeListener() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// clear your list selection here
mAdapter.clearSelection();
}
@Override
public boolean onCreateActionMode(final ActionMode mode, Menu menu) {
// inflate your action menu here
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.delete_mode_menu, menu);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_select_all:
if (mAdapter.isAllSelected()) {
mAdapter.clearSelection();
for (int i = 0; i < notiList.getAdapter().getCount(); i++) {
notiList.setItemChecked(i, false);
}
} else {
mAdapter.selectAllItems();
for (int i = 0; i < notiList.getAdapter().getCount(); i++) {
notiList.setItemChecked(i, true);
}
}
break;
case R.id.action_delete:
mAdapter.deleteSelectedItems();
mode.finish();
break;
}
return true;
}
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
deletionMode = mode;
if (checked) {
nr = nr + 1;
mAdapter.setNewSelection(position, checked);
} else {
nr = nr - 1;
mAdapter.removeSelection(position);
}
if (mAdapter.isAllSelected()) {
mode.getMenu().findItem(R.id.action_select_all).setIcon(R.drawable.check);
} else {
mode.getMenu().findItem(R.id.action_select_all).setIcon(R.drawable.uncheck);
}
}
});
}
这允许我重写索引的基本路径,并将跟踪分流到特定的控制器。
答案 0 :(得分:3)
很高兴为您提供帮助。
获取* .scheduler.com的有效SSL证书。如果您打算让它发挥作用,您将需要这样做。您确定要使用HTTPS吗?您的其他网址不是HTTPS。然后,您需要为* .scheduler.com设置虚拟主机才能正常使用该证书。 Only having:
<VirtualHost *:443>
ServerAlias *.scheduler.com
DocumentRoot "/var/www/html/progetti/scheduler"
</VirtualHost>
不会有足够的东西。您需要在其中设置所有mod_ssl内容,就像在其他虚拟主机上一样。您可以使用该默认HTTPS主机,而不是添加另一个,并进行修改。
首先要做的是让您的托管服务适用于https://*.scheduler.com/,然后将其指向正确的位置。
您的端点是http://webserver/scheduler
是什么意思?这不是有效的域名。请澄清你的意思,我会更新我的答案更多信息。代码是否在同一台服务器上?
-
<强>更新强>
所以要在没有SSL的情况下执行此操作,请将以下内容添加到&#34; 000-default.conf&#34;,在当前的位置之后:
<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>
-
<强>更新强>
要使http://webserver/foo.scheduler.com工作并提供/调度程序,请将其添加到已存在的VirtualHost中。不是上面添加的新版本,原版版本位于顶部。
RewriteEngine on
RewriteRule ^(/[^./]+\.scheduler\.com)(?:$|/(.*)$) /scheduler/$2
让我知道任何问题。如果您希望将它放在.htaccess中,则需要更新。
答案 1 :(得分:1)
注意:我从字面上理解您的应用正在使用http://
的语句,客户端将使用https://
个网址。此外,我假设客户端与托管应用程序的服务器位于同一服务器上。
最简单的方法可能是为您的实际应用程序配置一个VirtualHost,为其他URL配置一个VirtualHost。
因此假设您的应用程序位于/var/www/html/scheduler
,那么您现有的VirtualHost
似乎是:
<VirtualHost *:80>
ServerName webserver
DocumentRoot "/var/www/html"
</VirtualHost>
您需要在conf.d/ssl.conf
添加更改,以便具有以下内容:
NameVirtualHost *:443
<VirtualHost *:443>
ServerAlias *.scheduler.com
DocumentRoot "/var/www/html/scheduler"
</VirtualHost>