HTACCESS - 允许访问文件夹

时间:2016-10-14 08:54:32

标签: apache .htaccess mod-rewrite

这是我目前的htaccess。

网站 |的.htaccess | - /文件夹1 | - /文件夹-2

现在我的root htaccess如下:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^site.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^site.com$
RewriteRule ^/?$ /public/ [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*) /public/$1 [L]


RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

我希望用户访问文件夹1和文件夹2中的所有文件和文件夹。如何做到这一点?

1 个答案:

答案 0 :(得分:0)

一些变化:首先重定向您的域名(注意细微的变化);

RewriteEngine on
RewriteBase /

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

RewriteCond %{HTTP_HOST} ^site\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?!(?:folder-1|folder-2)(?:$|/)|public/(?:index\.php)?$).* public/$0 [L]

这将您从重写中排除的文件夹合并到主规则中,因此应该更有效率。它看起来很难看,因为它以负前瞻断言(?!开始,其余组以(?:开头,因此它们不会被捕获。

你真的需要一个域名吗?如果是这样,应检查所有请求。如果没有,请删除第二个RewriteCond的第一个RewriteRule

如果您的默认文档不是index.php,请在第二个RewriteRule的否定前瞻声明中更改它。