在子目录中安装Laravel&阻止访问它

时间:2014-07-03 15:08:59

标签: php .htaccess laravel-4

Laravel在public目录中有HTML文件。因此,如果我使用git将源代码推送到我的网站,我必须通过http://example.com/public访问该网站。但我不想要这个。

因此,我将Laravel Source包含在名为laravel的子目录中,并在站点根目录下创建了一个.htaccess文件,其中包含以下代码:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteBase /laravel
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*?)$ public/$1 [L]
</IfModule>

因此,对root的任何请求都将转发到public目录中的laravel目录。

可行,但任何人都可以通过转到laravel

访问http://example.com/laravel目录

我不希望他们访问laravel目录。那么,如何使用子目录安装来阻止访问laravel目录?

我已尝试在deny from all目录的.htaccess文件中添加laravel,但它也可以禁止访问根网站。

当前目录树:

my-site-dir
    |- .git
    |- .gitignore
    |- .htaccess
    |- laravel
        |- app
        |- bootstrap
        |- public
        |- vendor
        |- and rest of Laravel Files

2 个答案:

答案 0 :(得分:0)

经过一番搜索,我找到了解决方案。阻止 HTTP请求laravel目录。

.htaccess子目录中创建laravel文件,并将以下代码放入其中:

RewriteEngine on 
RewriteRule $ - [F]

当发送对laravel目录(包括索引)文件的任何直接请求时,上述规则将显示 403 Forbidden Error ,但不会影响mod_rewrite的{​​{1}}规则根目录的.htaccess文件。

答案 1 :(得分:0)

您只需要更改DocumentRoot / root。

让它指向laravel的公共文件夹,例如:

  

服务器{
          root / var / www / laravel / public /;
          index index.php index.html index.htm;

    server_name your.name;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    # pass the PHP scripts to FastCGI server listening on /var/run/php5-fpm.sock
    location ~ \.php$ {
            try_files $uri /index.php =404;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    } 
     

}