不存在的文件/ URL返回403 Forbidden

时间:2014-02-06 20:59:55

标签: apache .htaccess apache2

转到example.com/configexample.com/account/login会返回403 Forbidden。

实际上,/config/account/login应该重定向到index.php,但它会给出403。

我的目录结构如下:

/var/www/example
└─/assets
└─/bower_components
└─/node_modules
└─/partials
└─/templates
└─/tests
└─/vendor
└─index.php

这是我的虚拟主机配置:

<VirtualHost *:80>
  ServerName example.com
  DocumentRoot /var/www/example

  <DirectoryMatch "^/var/www/example/(?!(assets|partials))\w+">
    Require all denied
  </DirectoryMatch>

  <Location />
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [QSA,L]
  </Location>
</VirtualHost>
  • 我想禁止访问除assetspartials之外的所有文件夹,这就是我添加该DirectoryMatch指令的原因。

  • 我使用一个名为Slim的PHP框架,所以我必须添加Location和Rewrite指令。

我认为Apache认为我的URL是目录并阻止它们。有没有办法取消阻止我的网址?

2 个答案:

答案 0 :(得分:0)

尝试添加:

<Directory "/var/www/example">
    Order Allow,Deny
    Allow From all
</Directory>

在vhost配置中的<DirectoryMatch>容器上方。


由于您使用的是apache 2.4,因此请使用require all:

<Directory "/var/www/example">
    Require all granted
</Directory>

答案 1 :(得分:0)

如果您正在使用Apache 2.4,请尝试在VirtualHost的末尾添加:

<Directory /var/www/example>
Options Indexes FollowSymLinks MultiViews

# If you want to enable overrides, you should read:
# http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride
AllowOverride All
Require all granted
Satisfy Any

Order allow,deny
Allow from all
</Directory>