【问题标题】:.htaccess being ignored in sub-directory.htaccess 在子目录中被忽略
【发布时间】:2011-07-25 14:50:37
【问题描述】:

我正在尝试让我的 .htaccess 文件从根目录工作,但也使用 RewriteRule 作为子目录。

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond %{REQUEST_URI} !^/admin/index.php$ [NC]
    RewriteRule ^admin/(.*)$ /admin/index.php?_pd=$1 [QSA,L]
    RewriteRule ^(.*)$ /index.php?_pd=$1 [QSA,L]
</IfModule>

但是,当我尝试访问 /admin/login 等时出现 404 错误。这种工作方式:

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?_pd=$1 [QSA,L]

    RewriteCond %{REQUEST_URI} !^/admin/index.php$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^admin/(.*)$ /admin/index.php?_pd=$1 [QSA,L]
</IfModule>

但不是它应该怎么做。有些东西有效,有些无效。

【问题讨论】:

  • 如果此 .htaccess 在 /admin/ 文件夹中,则重写规则中的模式不应包含 admin/ 部分(URL 将相对于当前文件夹)。
  • 好吧..因为我没有所有的细节——我可以建议交换 2 条规则(你的第二个例子)——将 3 行块移到 4 行块下方。这应该处理/admin/xxx URL,因为现在/index.php 采用所有URL(规则的顺序很重要)并且/admin/ 规则永远不会匹配。
  • 这给了我一个404 虽然我知道/admin/index.php 在那里。
  • 好吧..在这种情况下我只能建议打开重写调试(RewriteLogLevel 9)并检查重写日志。另请检查/admin/index.php 的访问权限(以防万一)。
  • RewriteLogLevel 指令不能放在 .htaccess 中 -- 只能放在服务器配置或虚拟主机上下文中。

标签: .htaccess subdirectory


【解决方案1】:

这实际上是因为我错过了包含.htaccess 中的ErrorDocument 显然,因为admin 文件夹没有包含这个相同的文档,它没有遵循像这样的规则它应该,并尝试向我提供该文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2017-10-18
    • 2015-07-20
    • 2012-09-16
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多