代码之家  ›  专栏  ›  技术社区  ›  animuson

如何强制Apache简单地重定向用户并忽略目录结构?

  •  1
  • animuson  · 技术社区  · 14 年前

    好吧,所以这个问题最近才出现,我不知道为什么会发生,它实际上是两个问题合一的…

    0。我的.htaccess文件,供参考。(编辑)

    Options -Indexes +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    
    ErrorDocument 400 /index.php?400
    ErrorDocument 401 /index.php?401
    ErrorDocument 403 /index.php?403
    ErrorDocument 404 /index.php?404
    ErrorDocument 410 /index.php?410
    ErrorDocument 414 /index.php?414
    ErrorDocument 500 /global/500.php
    
    RewriteCond %{HTTP_HOST} !^$ [NC]
    RewriteRule .* index.php [L]
    
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^https?://(.*\.)?(animuson)\.(biz|com|info|me|net|org|us|ws)/.*$ [NC]
    RewriteRule ^.*$ - [F]
    

    1。我的“pictures”文件夹正在跟踪硬路径,而不是重定向。

    我不知道为什么要这样做。真让我讨厌。“pictures”文件夹是指向另一个位置的符号链接,这样我就可以轻松地将文件上载到该文件夹,而无需通过文件夹等通过我的ftp帐户进行搜索,但这是我使用它的唯一目的。但是,当我访问 http://example.com/pictures 我的htaccess将其视为访问另一个受限制的文件夹,并抛出403错误,而不是重定向到index.php并像正常一样显示页面。

    我认为这与特定的文件夹是一个符号链接有关,它的行为很奇怪,但我已经确定我的规则根本不适用于文件夹。如果我访问“css”和“com”等文件夹(它们是Web根目录中的文件夹),它将显示404错误页,并将“/”添加到URL的末尾,因为它将其视为目录。它也会对以相同方式设置的“images”目录执行同样的403错误。

    所以,这里的问题是如何修改我的rewriterule来应用到目录中呢?我希望通过Web访问的所有内容都重定向回index.php,同时在地址栏中维护完整的访问路径,为什么它不工作?(我很肯定它以前工作得很好。)

    这是一个小图表,显示了他们的路径…

    example.com/pictures  -> pictures/ -> /home/animuson/animuson-pictures -> 403
    example.com/com       -> com/      -> 404
    example.com/test      -> index.php
    example.com/          -> index.php
    example.com/images    -> images/   -> /home/animuson/animuson-images   -> 403
    example.com/css       -> css/      -> 404
    

    编辑:添加以下信息。
    Apache首先处理目录的结构。它根据输入到地址栏的内容来确定路径是否存在。如果有人键入了一个碰巧存在的文件夹名,它会将用户重定向到URL末尾带有“/”的路径,表示该路径是一个目录。对于上面解释的“pictures”目录,用户没有访问该文件夹的权限,因此将其重定向到403拒绝访问页,而不是简单地显示 想象上的 通过上面的重写器显示在那里。我最大的问题是为什么Apache要处理目录 第一 我怎么才能让它停止这样做?

    2。为什么压缩不起作用?(编辑:此部分是固定的。)

    当通过Web优化器分析我的站点时,它总是说我的页面没有使用Web压缩,但我几乎百分之百肯定,它以前在相同的设置下运行良好。有人能提出它为什么不能与这个设置一起工作的任何原因吗,或者提出一个更好的方法来做它?

    2 回复  |  直到 14 年前
        1
  •  1
  •   nitro2k01    14 年前

    这个.htaccess文件在哪里?在根目录还是在图片目录中?

    1)你正在使用 Options -Indexes 这将拒绝访问目录列表。这是由/index.php处理的?403,然后重定向到/403。(我通过手动转到/index.php确认了这一点?403)我在posted.htaccess中没有看到任何其他可能影响此操作的规则。因此,这可能是因为index.php或其他一些.htaccess文件或服务器规则导致了重定向。

    您可能还需要检查相关目录的Unix文件权限。

    2)根据这个合成器, http://www.websiteoptimization.com/services/analyze/ ,确实为HTML、JS和CSS文件启用了压缩,如规则中所指定的那样。我敢打赌优化器是愚蠢的,它会做以下三件事之一:

    1)抱怨图像未被压缩。(压缩图像通常是一个坏主意,因为它们通常已经被压缩,额外的CPU负载通常不值得,因为净增益太小。所以你的规则在这方面是可以的。)

    2)它可能认为deflate不算压缩,希望您使用gzip。

    3))它还可能对外部包含的未压缩的StatCounter JS文件做出反应。(你对此无能为力。)

        2
  •  0
  •   animuson    14 年前

    经过一段时间对Apache的IRC频道的研究,我终于能够侥幸地找到背后的真正原因。我只是碰巧在看目录结构 ls -l 注意到所有的符号链接都以某种方式将其权限更改为 animuson:animuson root:root 原创。我试着做一个简单的 chown root:root 对它们没有任何影响,所以我删除了它们,重新创建了它们,问题就消失了。我真的不知道为什么权限在这个场景中有所不同,但是解决方案起作用了,现在一切都正常了。我还添加了 DirectorySlash Off 到我的.htaccess文件中去掉文件夹后的斜线,只是为了让它看起来更好。