【问题标题】:RewriteCond check if directory exists with an index fileRewriteCond 检查目录是否存在索引文件
【发布时间】:2013-10-29 16:27:17
【问题描述】:

我正在尝试重写所有请求,除非 URL 指向:

  • 现有文件
  • 带有索引文件的目录

所以我有以下应该处理的:

RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ redirect.php [QSA]

但是当我导航到包含index.php 的文件夹时(是的,我已经检查了DirectoryIndex 是否设置为index.php),它仍然会执行重写。

我还发现有趣的是,如果我在那个文件夹中有一个 .htaccessRewriteEngine on(仅此而已),那么上面的重写规则就可以工作了......

任何指针?

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:

    您需要检查目录部分:

    RewriteCond %{REQUEST_FILENAME}/index\.php !-f
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ redirect.php [QSA,L]
    

    还有:

    我还发现有趣的事情是,如果我在那个文件夹中有一个 .htaccess 并启用了 RewriteEngine(仅此而已),那么上面的重写规则就可以工作......

    这是因为子目录中的重写规则优先于父目录中的任何规则。因此,如果您有一个带有RewriteEngine On 的子目录,并且没有任何规则,那么这意味着该子目录优先于父目录中的重写规则,并且没有任何规则。 (有点混乱)。

    【讨论】:

    • 我认为你的前两个条件是互斥的。
    • 谢谢,就是这样。奖励这个答案,因为它也解释了“有趣的事情......”部分:)
    • 好的,现在你可以得到我的 +1 了 :)
    • 不幸的是,它不适用于我的网站。浏览器抱怨重定向过多。所有其他条件/规则均已注释掉。
    【解决方案2】:

    在您的根 .htaccess 中尝试此规则:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{DOCUMENT_ROOT}/$1/index.php !-f
    RewriteRule ^(.*?)/?$ redirect.php [L]
    

    【讨论】:

      猜你喜欢
      • 2013-06-04
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 2021-07-22
      相关资源
      最近更新 更多