【发布时间】: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 是一种糟糕的做法,因此如果您正确构建应用程序,您一开始就不需要求助于基本元素。
标签: apache .htaccess mod-rewrite keystonejs