【问题标题】:htaccess works with www.example.com but not example.comhtaccess 适用于 www.example.com 但不适用于 example.com
【发布时间】: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 访问的博客。域,但不是没有它(但管理面板是)。把我搞糊涂了。

标签: node.js .htaccess ghost


【解决方案1】:

我想也许你应该使用 mod_proxy 而不是 mod_rewrite。至少,这是我过去使用的。 Apache 将捕获来自端口 80 的请求,然后将它们重定向到您的节点服务器正在侦听的端口 65515。

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass

像这样:

ProxyPass / http://localhost:65515/

【讨论】:

  • 是的,没错。显然 [P] 确实通过 mod_proxy 推送请求。对不起,我可能会删除这个答案。不过,我会评论您的原始问题以进行澄清。
  • 我刚刚检查了以前的设置。我只有一行:“ProxyPass / localhost:8080”
  • 谢谢。尝试仅使用proxypass,但它根本不起作用。 Ghost 管理员给了我一个 404 错误,并且 index.js 只是继续加载文件的内容。
  • 我发现如果我访问 www.example.com,它可以正常工作。不知道我是如何错过这个明显的事实的,但我习惯于总是只输入没有 www 的域。我已经编辑了我的帖子以反映这一点。
【解决方案2】:

我想通了。与 htaccess、Ghost 或 nodejs 或类似的东西没有任何关系。不,问题是服务器正在缓存网站。我发现了删除缓存的设置,一切正常,所以,现在解决了。

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 2010-12-08
    • 1970-01-01
    • 2016-04-09
    • 2011-07-04
    • 2013-11-30
    • 1970-01-01
    • 2020-01-04
    • 2010-12-20
    相关资源
    最近更新 更多