使用 htaccess 将 keystone 应用程序重定向到子目录

Posted

技术标签:

【中文标题】使用 htaccess 将 keystone 应用程序重定向到子目录【英文标题】:Redirect keystone app to sub directory using htaccess 【发布时间】:2015-08-24 08:08:33 【问题描述】:

我是 htaccess 的新手。我正在使用 Keystone.js,我使用它开发了一个正在侦听端口 3000 的博客。像这样:

https://localhost:3000

现在一切都很好。但我想要的是我的博客应该在这个 url 上运行:

https://localhost/blog

在我提供“https://localhost/blog”的情况下,如何实现这种情况,它应该像“https://localhost:3000”一样​​工作。在这种情况下,URL 将保持不变:https://localhost/blog

另外,我还希望当用户访问此 url:“https://localhost:3000”时,它应该重定向到:“https://localhost/blog”。

我怎样才能实现这种情况?我只想从 URL 中隐藏一个端口。

我尝试了很多方法来解决,但它对我不起作用。 像这样的:

RewriteEngine On
RewriteCond %SERVER_PORT 80
RewriteRule ^blog(.*) http://localhost:3000/$1 [P,L]

好的,现在这个关于代码的代码非常适合主页,即:https://localhost/blog,因为我在 htaccess 中为它添加了一条规则。但问题是我的博客中的所有链接、图片和包含的文件都已损坏。

现在我为这个问题使用了基本标签。但它会将我的链接转换为这种格式:

http://localhost:3000/contact
http://localhost:3000/help
http://localhost:3000/post

我将http://localhost:3000/ 视为我页面标题中的基本标记。 如您所见,3000 端口再次出现在我不想显示的 url 中。应该是:

http://localhost/blog/contact
http://localhost/blog/help
http://localhost/blog/post

【问题讨论】:

你在 Apache 上运行 NodeJS 吗? 是 Ubuntu 服务器上的节点和 apache。 使用 ProxyPass 怎么样?这不是更好的解决方案吗? 将 ModRewrite 用于友好的 URL 时,我发现的最佳做法是不破坏页面,使所有相对 URL 以斜杠开头,从而引用 Web 根目录。无论用户是否访问localhost/blog/help、localhost/blog 或localhost:3000,这都会起作用。至于导航链接,如果您希望 :80/:3000/blog 加载相同的内容,无论是否存在重定向,您都需要 php 输出 //blog/,具体取决于 URL用户正在访问,因此页面不会中断。 如果可以的话,我认为不惜一切代价避免使用基本元素。这是一种糟糕的做法,并且随着软件生命周期的继续,在此过程中造成的麻烦比它解决的问题要多。当所有相对 URL 都应该基于 Web 根目录或者是绝对 URL 时,这是一个简单的修复,相当于禁用 PHP 警告而不是修复它们。相对于当前页面的 URL 是一种糟糕的做法,因此如果您正确构建应用程序,您一开始就不需要求助于基本元素。 【参考方案1】:

这是在端口 80 上运行 Node 最安全、最简单的方法:

登录到服务器并发出以下命令:

$ sudo apt-get install libcap2-bin
$ sudo setcap cap_net_bind_service=+ep /usr/local/bin/node

注意:将上面 Node 的路径更改为键入which node时显示的任何内容

现在,当您告诉 Node 在端口 80 上运行时,它不会抱怨。而且您不必处理 Apache 或 nginx,以 root 身份运行您的应用程序,或担心端口转发。

【讨论】:

【参考方案2】:

我建议使用 NGINX 来解决这个问题。您可以查看这些链接:

https://allaboutghost.com/how-to-proxy-port-80-to-2368-for-ghost-with-nginx/

Node.js + Nginx - What now?

【讨论】:

以上是关于使用 htaccess 将 keystone 应用程序重定向到子目录的主要内容,如果未能解决你的问题,请参考以下文章

OpenStack 认证服务 KeyStone

如何使用 React 在 Keystone.js 中使用自定义模板?

OpenStack核心组件原理与应用之Keystone

将 .htaccess 与 FastCGI 一起使用

使用基于用户代理的.htaccess将网页重定向到其他网页

OpenStack 认证服务 KeyStone使用