htaccess - 使公共目录可访问

时间:2014-06-27 11:05:54

标签: apache .htaccess mod-rewrite

是的,这里已经提到了很多,所提供的解决方案都没有为我工作。

文件夹结构

/
+-- _projects
|   +-- includes
|   |   |-- main.class.php
|   +-- scripts
|   |   |-- saveitems.php
|   +-- view
|   |   |-- layout.php
|   |-- index.php
|   |-- .htaccess
|     
+-- _pub
|   +-- img
|   |   |-- webicon_facebook.png
|   |   |-- webicon_twitter.png
|
+-- view
+-- includes
|-- index.php
|-- .htaccess
root中的

.htaccess文件:

Options -Indexes +FollowSymlinks
RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)\/(.+)$ index.php?page=$1&item=$2 [L,QSA]
RewriteRule ^([a-z]+)$ index.php?page=$1 [L,QSA]

任务: 允许浏览器访问 _pub

中的任何文件夹或文件

我尝试了什么:

  • 使用带有Satisfy Any Allow from all的.htaccess文件 的 _pub
  • _pub 文件夹
  • 中禁用RewriteEngine
  • 更改根htaccess文件,使其包含RewriteRule ^_pub/$ _pub/ [L]
  • 下面的RewriteBase \内容

奇怪的是,当浏览到 _projects 时,访问该文件夹中的索引文件并从中完全加载网站。 但是当访问 _pub (没有索引文件)时,我从主机收到403错误。

我很确定我在root htaccess文件中遗漏了一些内容,允许直接访问 _pub 中的文件夹和文件,但我无法弄清楚是什么。

3 个答案:

答案 0 :(得分:0)

如果目的索引是您的意图,那么您不应该使用Options -Indexes来禁用目录索引,您应该使用Options +Indexes

答案 1 :(得分:0)

听起来您希望将_pub视为例外:您不希望应用正常规则,并且您希望允许直接访问_pub中的所有文件重写。如果不在.htaccess中创建更多_pub规则,有几种方法可以做到这一点。

一种方法是通过添加否定前瞻来更改DOCUMENT_ROOT中已有的规则:

RewriteRule ^(?!_pub)([a-z]+)\/(.+)$ index.php?page=$1&item=$2 [L,QSA]
RewriteRule ^(?!_pub)([a-z]+)$ index.php?page=$1 [L,QSA]

试一试,不要更改你在问题中显示的RewriteConds。

答案 2 :(得分:0)

保持你的根.htaccess像这样:

Options +Indexes +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^/_pub/ [NC,OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([a-z]+)/(.+)$ index.php?page=$1&item=$2 [L,QSA]

RewriteRule ^([a-z]+)/?$ index.php?page=$1 [L,QSA]