使用 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 应用程序重定向到子目录的主要内容,如果未能解决你的问题,请参考以下文章