【问题标题】:Apache doesn't seem to be detecting my .htaccess fileApache 似乎没有检测到我的 .htaccess 文件
【发布时间】:2021-04-01 16:17:47
【问题描述】:

我正在通过 MAMP 在我的计算机上运行 Apache 服务器,但我似乎无法让它读取我的 .htaccess 文件。我看过的所有解决方案都说要确保我的AllowOverridehttpd.conf 中设置为All,但这似乎并不能解决我的问题。我知道.htaccess 没有被读取,因为我在文件开头写了一些废话并且没有产生错误。在更改httpd.conf 后,我还重新启动了 Apache 服务器。也许问题是我不完全确定应该将.htaccess 文件放在哪里。

我的 MAMP 文档根目录以前是 MAMP > htdocs,但我将其更改为 Library > WebServer > Documents,这是我所有 PHP 文件所在的位置。我正在处理的当前项目是它的一个子目录,比如Library > WebServer > Documents > project。这是包含我的.htaccess 文件的文件夹。我的httpd.conf文件在MAMP > conf > apache,相关部分如下:

# First, we configure the "default" to be a very restrictive set of 
# features.  
#
<Directory />
    Options Indexes FollowSymLinks
    AllowOverride All
</Directory>

我是否需要将目录从 / 更改为其他内容才能正常工作?非常感谢任何帮助。

编辑:我在下面的 cmets 之后将以下 &lt;VirtualHost&gt; 块添加到了我的 httpd.conf,但同样,似乎没有任何变化:

<VirtualHost *:80>
   ServerAdmin email@site.com
   ServerName localhost:8890

   DocumentRoot /
   <Directory />
      Options FollowSymLinks
      AllowOverride None
   </Directory>
   <Directory />
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      allow from all
   </Directory>
</VirtualHost>

更新(已解决):我能够通过将 MAMP 的 DocumentRoot 恢复为原来的 MAMP &gt; htdocs 而不是我的 Library &gt; WebServer &gt; Documents 来解决问题。 Apache 现在正在读取位于我的MAMP &gt; htdocs &gt; project 中的.htaccess 文件。感谢大家的帮助。

【问题讨论】:

  • 这可能相关也可能不相关,但是您知道.htaccess 文件的编码吗?根据我的经验,Apache 不喜欢 UTF-8 编码的.htaccess。因此,仅对于这些文件,我使用 Windows 1252
  • 感谢您的回复,其实我对它的编码一无所知。如何检查并更改为正确的?
  • 在 Sublime Text 中,有一个选项:Save with Encoding。您可以选择任何您想要的,然后文件将使用该编码保存。我猜其他文本编辑器也会有类似的选项。
  • 哦,我明白了,您建议我切换到哪种编码?我有一个以一些 UTF 开头的列表,然后是对应于不同语言的编码。我没有在我的列表中看到 Windows 1252。
  • 我明白了,不幸的是它似乎没有改变任何东西,但无论如何都感谢您的帮助。

标签: php apache .htaccess mamp


【解决方案1】:

首先我会尝试修复我的 VirtualHost 以使用正确的路径。我对 Mac 不是很熟悉,但如果 Library &gt; WebServer &gt; Documents &gt; project 对应于您的文件系统中的 /Library/WebServer/Documents/project,那么我会使用它。可能是/home/your_username/Library/WebServer/Documents/project,但正如我所说,我不是 Mac 用户。接下来,我不明白为什么您对具有相反权限的同一目录有指令,所以我会尝试删除第一个 Directory 块或将目标目录更改为其中一个块上的其他内容。请注意,您永远不应使用 apache 授予对 / 的访问权限,因为这将是一个非常大的安全漏洞。

<VirtualHost *:80>
   ServerAdmin email@site.com
   ServerName localhost:8890

   DocumentRoot /Library/WebServer/Documents/project
   <Directory />
      AllowOverride none
      Require all denied
   </Directory>
   <Directory /Library/WebServer/Documents/project>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Require all granted
   </Directory>
</VirtualHost>

如果它仍然不起作用,您可能需要确保 Apache 正在查找的文件名没有使用 AccessFileName 指令更改为其他名称。

此外,您没有详细说明将 VirtualHost 块放在何处,但是否在单独的文件中。确保您以某种方式包含该文件。

您没有指定您的 Apache 版本,但从 2.4 版开始,您应该使用 Require 而不是 Allow 指令,因为这已被弃用。见https://httpd.apache.org/docs/2.4/en/howto/access.html

【讨论】:

  • 感谢您的回答,我尝试根据您上面的内容更新&lt;VirtualHost&gt; 标签,但我仍然看不到任何区别。 AccessFileName 仍然是 .htaccess。我认为问题在于&lt;Directory /Library/WebServer/Documents/project&gt; 标签中的规则实际上并未应用于我的项目。有没有办法检查它们是否存在?例如。如果我尝试打开project/index.php,是否有会产生错误的命令?我可以直接在我的httpd.conf 而不是.htaccess 文件中输入规则;我只需要一些简单的Rewrite 路由命令。
【解决方案2】:

检查您的httpd.conf。通过 AllowOverride (http://httpd.apache.org/docs/current/mod/core.html#allowoverride) 和 AllowOverrideList (http://httpd.apache.org/docs/current/mod/core.html#allowoverridelist) 指令,它可以控制是否考虑 .htaccess 文件。

当此指令(即 AllowOverride)设置为 None 并且 AllowOverrideList 设置为 None 时,.htaccess 文件将被完全忽略。在这种情况下,服务器甚至不会尝试读取文件系统中的 .htaccess 文件。

请注意,两者的默认值都是None,这正是导致这种不考虑.htaccess文件的行为。

【讨论】:

  • 感谢您的回复,但是在我的httpd.conf 文件中,我所有的AllowOverride 都设置为All;我没有出现AllowOverrideList
【解决方案3】:

尝试将Listen 80Listen 443 添加到主配置的顶部。

【讨论】:

  • 感谢您的回答。当我添加Listen 80 时,我收到“Apache 无法启动”错误。我可以添加Listen 443,但不幸的是这并没有改变任何东西。
  • 启动失败时,日志中有详细信息吗?
  • 我刚刚在包含Listen 80 的情况下再次尝试,但我似乎只在关闭服务器时在日志中收到一条消息,而不是在我再次启动它时。
猜你喜欢
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 2018-10-19
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多