将子域url重写为www-apache-php(使用slim框架)

将子域url重写为www-apache-php(使用slim框架),apache,mod-rewrite,url-rewriting,slim,Apache,Mod Rewrite,Url Rewriting,Slim,我有一个使用api的angular网站。现在我想创建自动登录页 我的api url是这样制作的(https://)system.mydomain.com/api-它是一个使用slim框架的rest api 现在我已经为登录页面创建了路由,比如(https://)system.mydomain.com/content/seo-name-of-item 这是可行的,但我不想在本例中显示“system.mydomain.com”(在URI中是“content”),但我希望它是(https://)myd

我有一个使用api的angular网站。现在我想创建自动登录页

我的api url是这样制作的(https://)system.mydomain.com/api-它是一个使用slim框架的rest api

现在我已经为登录页面创建了路由,比如(https://)system.mydomain.com/content/seo-name-of-item

这是可行的,但我不想在本例中显示“system.mydomain.com”(在URI中是“content”),但我希望它是(https://)mydomain.com/content/seo-name-of-item或/和(https://)www.mydomain.com/content/seo-name-of-item


获得此行为的最佳方法是什么?

最优雅的方法可能是结合使用apaches代理模块和重写规则。这使URL在浏览器中保持可见不变,但在内部代理不同http主机之间的请求

在主机
www.example.com
和/或
example.com
主机中使用此规则:

RewriteEngine on
RewriteRule ^/?content/seo-name-of-item https://system.example.com/api [END,P]
语法应该在真正的http主机配置或
htaccess
样式的文件中工作。但有一个一般性提示:您应该始终希望将此类规则放置在http服务器主机配置中,而不是使用
.htaccess
样式的文件。这些文件是出了名的容易出错,难以调试,而且它们确实降低了服务器的速度。它们仅在您无法控制主机配置(读:非常便宜的主机服务提供商)或您的应用程序依赖于编写自己的重写规则(这显然是一个安全噩梦)的情况下作为最后一个选项提供

如果出现内部服务器错误(http状态500),则可能必须将
END
标志替换为较旧的
L
标志

对于外部可见的主机名,您需要可验证的ssl证书,因此
www.example.com
和/或
example.com

您还可以决定在内部为内部代理连接使用http,因为ssl加密在那里没有真正意义

哦,显然你需要安装代理模块


另一种方法是只使用代理模块。查看
ProxyPass
规则的文档和示例:

请记住,对于三个主机名
system.mydomain.com
mydomain.com
www.mydomain.com
,您需要单独的有效ssl证书。或者是昂贵的“通配符证书”。最好的方法是什么?您可以通过外部重定向(更改浏览器中可见的URL)或使用内部代理模块在单独的http主机之间代理请求(浏览器中的URL和主机名不更改),来实现重写规则是的,我可以从该URL重定向到另一个URL,但是所有的逻辑都是在system.mydomain.com/content/something中完成的-这是一个在slim framework中创建的路由,它可以工作,我只是不希望访问者看到该系统。如果我重定向,我必须在一个单独的文件夹中执行逻辑,失去slim Framework的所有功能,我无法跟随。即使您执行了外部重定向,您也可以毫无问题地为生成的请求添加一些内部重写,将请求映射到内部使用的任何布局。这只意味着您的http主机名在URL中发生了更改。但正如所说:使用内部代理模块甚至可以防止这种情况。请看下面我的答案。那么,当有人访问system.mydomain.com/content/something时,它会将www.mydomain.com/content/something显示为url吗?“something”部分也需要是可变的,否。这允许有人输入
https://www.example.com/content/seo-name-of-item
在浏览器中查看该URL,同时您的安装程序在
https://system.example.com/api