4

这是我的 .htaccess 文件:

# NO LISTING OF INDEXES
Options -Indexes

<IfModule mod_rewrite.c>
  RewriteEngine On

  # NIX THE www BECAUSE IT IS NO LONGER 1996 AND YOU'RE COOLER THAN THAT
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteRule ^(.*)/$ http://%1/$1 [R=301,L]

  # NIX TRAILING SLASHES BECAUSE SEO IS A VENGEFUL GOD AND WHATNOT
  RewriteRule ^(.*)/$ $1 [R=301,L]

  # SEND ALL NON-FILE REQUESTS TO index.php FOR FIGURING OUT
  RewriteBase /
  RewriteRule ^index\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>

# ERROR DOCS
ErrorDocument 400 /error/400
ErrorDocument 401 /error/401
ErrorDocument 403 /error/403
ErrorDocument 404 /error/404
ErrorDocument 500 /error/500

如果我尝试访问一个文件夹(/images//images我的站点结构中的某个其他真实文件夹),它会陷入重定向循环。

我尝试RewriteCond %{REQUEST_FILENAME} !-d在尾部斜杠规则之前添加,并且“修复”了重定向,因为它现在在正确的文件夹上强制使用尾部斜杠 - 但也将文件夹名称传递给我的脚本,就好像它是我的 CMS 的烘焙 URI 查询一样弄清楚。

我想我现在可以通过检查 URI 是否是某人试图非法列出的文件夹来尝试在 CMS 端解决此问题,但理想情况下,将有一个优雅的.htaccess解决方案将文件夹列表调用重定向到我这样的那些禁止页面之一有帮助地在那里声明。有人知道吗?

4

2 回答 2

1

不确定它是否会有所作为,但我通常在任何条件规则之前从顶部开始

RewriteEngine On
Options +FollowSymlinks
RewriteBase /

您的重写基础稍后开始。也许把它移上去。

于 2012-09-05T17:02:52.033 回答
1

注释掉/删除这一行:

RewriteRule ^(.*)/$ $1 [R=301,L]

您实际上并不需要它,因为Options -Indexes当有人试图列出您的目录内容时,您已经在顶部显示禁止错误。除此之外,对您的代码进行一些小的调整,如下所示:

# NO LISTING OF INDEXES
Options +FollowSymLinks -MultiViews -Indexes

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteRule ^(.*)/$ http://%1/$1 [R=301,L]

  # SEND ALL NON-FILE REQUESTS TO index.php FOR FIGURING OUT
  RewriteRule ^index\.php$ - [L,NC]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^ index.php [L]
</IfModule>

# ERROR DOCS
ErrorDocument 400 /error/400
ErrorDocument 401 /error/401
ErrorDocument 403 /error/403
ErrorDocument 404 /error/404
ErrorDocument 500 /error/500
于 2012-09-05T17:10:52.650 回答