【发布时间】:2017-02-01 21:34:39
【问题描述】:
我已经安装了 Ghost,它需要 nodejs 才能运行。我正在通过托管主机在 Apache Linux 服务器上执行此操作。他们好心让我使用 SSH 访问登录,所以我已经能够使用标准安装说明设置 nodejs 和 Ghost。我将 ghost 安装到我的域的根目录,所以在正常操作中有人会去 example.com,它会向他们展示我的博客。这就是我所希望的。
但是现在当我在我的浏览器中加载 Ghost 时,我发现因为我正在以我的方式访问它,并且 Ghost 不进行服务器配置,我似乎需要一个 htaccess 文件才能使网站可访问。
所以,我创建了这个 htaccess 文件:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ http://127.0.0.1:65515/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://127.0.0.1:65515/$1 [P,L]
</IfModule>
将它保存到根目录后,如果我访问 example.com/ghost(Ghost 的管理面板),它就可以工作。那里没有错,看起来很棒。但是,如果我尝试访问根目录,即转到 example.com,而不是向我显示索引,它会显示 index.js - 也就是说,它实际上会加载 Ghost 的 index.js 文件的内容并显示它而不是解析它并显示网站的主要索引。
如果我去 www.example.com 那么一切正常。所以无论问题是什么,都是因为我没有使用www。在域中。
不过,我希望它可以在 URL 中使用或不使用 www 的情况下工作。我确实尝试添加一些解决方案来将非 www 请求重定向到 www.example.com 到 ehtaccess 但由于某种原因它仍然不起作用(就像我输入 example.com 它不会将我重定向到 www.example .com)。
【问题讨论】:
-
澄清一下,最后一行中的“RewriteRul-e”是否只是您问题中的错字?
-
是的,我会改正的。
-
做一些选择性删除我发现第一个重写可能是这里的罪魁祸首。虽然我又不知道为什么。如果我删除第一个重写规则并保存,当我通过转到 example.com/ghost/ 加载 ghost 管理员时,它仍然有效。只需访问 example.com/ 仍然无法正常工作。所以据我所知,第一个重写规则没有做任何事情。
-
听起来你可能对 Ghost 配置有问题,而不是 htaccess 规则。但是,仅考虑重写规则,您为什么要检查请求的文件和请求的目录是否都不存在?如果您只是使用 apache 将请求代理到另一个端口,那么一个包罗万象的规则是否就足够了?比如,只是“RewriteRule ^(.*)$ 127.0.0.1:65515/$1 [P]”?
-
我不知道。我真的不精通编辑htaccess,因此我想为什么我会遇到这么多麻烦。果然,如果我将它设置为那一行,那么它就可以工作(好吧,它就像 www.example.com 一样工作)。我也多次检查了我的幽灵配置。您在其中设置了 url 路径,我最初将其设置为 http://example.com,后来我将其更改为 http://www.example.com 并重新启动了 Ghost,但它没有任何区别。可从 www 访问的博客。域,但不是没有它(但管理面板是)。把我搞糊涂了。