【问题标题】:htaccess file somehow being cached?htaccess 文件以某种方式被缓存?
【发布时间】:2011-05-28 19:47:47
【问题描述】:

我有一个 .htaccess 文件对页面名称进行了非常简单的重写。这是文件的内容:

Options +FollowSymlinks
RewriteEngine on
RewriteRule setup setup.php [NC]

我现在想停止将 setup 重写为 setup.php - 我该怎么做?我尝试从文件中删除该行,我尝试删除文件并重新启动 apache,但 仍然 将 setup 重写为 setup.php。我如何让它停止?它似乎完全忽略了我创建的任何其他 .htaccess 文件,并且没有任何内容写入错误日志。它是否在某处缓存文件?我该如何阻止它?

我在 ubuntu 上使用 apache2。

【问题讨论】:

  • 另外,在你问之前,我的浏览器没有缓存页面。我已经检查过了。
  • 你把这条规则放在你的 httpd.conf 或某个 conf.d 文件中了吗?您确定您正在编辑正确的 .htaccess 文件吗?它们的内容不会被缓存,它们会在每次请求时被读取。
  • 这是一个名为 .htaccess 的文件,位于 /var/www 目录中。如果我将其他文件放在该目录中,它们可以在 web 根目录下使用,所以我知道这是正确的位置。
  • 我遇到了同样的问题,在我的情况下,浏览器缓存了 url 重定向
  • 我的浏览器 (firefox) 也缓存了它。不知道为什么,但确实如此!

标签: apache .htaccess


【解决方案1】:

如果由于重定向缓存在浏览器中而导致 htaccess 文件无法更新,您遇到问题。您可以使用 Google Chrome 或 Safari 等 webkit 浏览器打开私人浏览会话或隐身窗口。

每次更新 htaccess 文件时,您都需要关闭所有隐身窗口/选项卡,然后再打开一个新的。隐身窗口不会在当前会话之后写入缓存,并且不会在初始加载时使用现有缓存。它是在测试时绕过缓存问题的好方法,也是查看您遇到的问题是否由浏览器缓存引起的好方法。

我不确定,但 Firefox 和更新版本的 IE 可能有类似的功能。

【讨论】:

  • 在 Chrome 中,您可以打开开发工具,选择设置图标并启用“禁用缓存(在开发工具打开时)”。
  • 请注意,这个问题是关于似乎由 服务器 缓存的内部重写。由浏览器缓存的外部重定向是一个不同的问题。
  • 请注意,这个问题可能与内部重写有关,因为很难测试浏览器是否正在缓存它。什么都没有被排除。
【解决方案2】:

问题是MultiViews 已启用。如果可能,MultiViews 会自动将扩展名添加到任何请求的 URL。这与您的 RewriteRule 无关;碰巧您将setup 重写为setup.php 所以MultiViews 并且您的规则也在做同样的事情。

-MultiViews 添加到Options 指令以禁用它。

【讨论】:

  • 调试这些类型的问题可能是最糟糕的。很高兴我早早找到了你的答案 =) +1
  • @nitro2k01 抱歉,但具体该怎么做呢?什么是选项指令?我在 mamp pro 本地主机上,代码点火器框架,mac yosemite。
【解决方案3】:

1) 检查以确保 nginx 不会给您带来问题 - 我只是将其关闭,但如果您想使用它,我确信有一些方法可以正确设置它。 (对我来说,它默认设置在 MediaTemple 最新的 DV 服务器上)。

2) 尝试将其添加到 httpd.conf 或 vhost.conf 或其他一些配置文件,从您的主目录的 htaccess 文件到食物链的上游:

Header merge Cache-Control no-cache env=NO_CACHE
Header merge Cache-Control no-store env=NO_STORE

【讨论】:

    【解决方案4】:

    解决方案是,打开文件 /etc/apache2/sites-available/default 并更改:

        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
    

    进入这个:

        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
    

    注意 AllowOverride 指令 - 该文件显然会覆盖其他地方的所有其他指令。

    【讨论】:

    • 如果.htaccess 根本不起作用,您会这样做。这不是 Benubird 的问题。
    • 哦,等等,这是你自己的回复……不过,我仍然不明白它是如何相关的。
    • @nitro2k01 老实说,我也没有——我只是随机做一些事情,然后解开它们并尝试其他方法,直到我发现一些有用的方法。这就是我不接受这个的原因;我仍然希望有人能解释一下,但 htaccess 是很神奇的。
    • 试试我的并比较.htaccess中的Options +MultiViewsOptions -MultiViews。不过,AllowOverride All 是能够覆盖 MultiViews(或任何其他)选项的先决条件。 (假设/var/www/ 是您的http 目录。否则您所做的更改无效。)
    • 我想知道缓存是否只是在进行此更改时才更新,因为它看起来确实不相关。我最近正在与一个 htaccess 问题作斗争,这让我发疯了,它绝对只是一个与实际页面缓存分开的缓存重定向。
    猜你喜欢
    • 2017-03-05
    • 2018-10-12
    • 2011-02-13
    • 2015-06-15
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    相关资源
    最近更新 更多