【问题标题】:.htaccess deny everything except one file on Laravel.htaccess 拒绝除 Laravel 上的一个文件之外的所有内容
【发布时间】:2018-07-11 17:49:30
【问题描述】:

我正在为我的网站使用 Laravel 平台。我想要实现的是只显示一个网页,其中包含有关该网站的一些信息。所有其他页面仍处于开发模式,因此我希望它们使用 .htaccess 进行保护。

这是我的 .htaccess 文件,不幸的是它要求每个页面都输入密码:

AuthName "myweb"
AuthUserFile "/home/passwd"
AuthType Basic
require valid-user

<Files "*">
Require valid-user
</Files>

<Files "start.html">
Allow from all 
Satisfy Any
</Files>

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

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

如果有 .htaccess 的解决方案会很棒,但是如果 Laravel 提供了一个简单的解决方案(维护模式除外),我也可以。

感谢您的建议!

【问题讨论】:

  • 为什么你没有为这样的东西设置合适的开发系统?首先,您不应该在实时环境中进行此类工作……您在编码时引入的一个小语法错误可能会使整个站点“崩溃”,甚至是您真正想要“实时”的部分。
  • 这种相当幼稚的允许/拒绝方法无论如何都行不通,如果您已经发布的页面嵌入了任何外部资源,如来自您自己系统的样式表、脚本或图像……您将不得不“允许”这些为好吧。
  • 是的,你说得对,我需要允许这些外部资源。但是 on 代码仍然不起作用。你知道为什么吗?
  • 那么start.html 是否实际上以文件的形式存在 - 或者这只是由 index.php 通过重写处理的路由?
  • 那么 Files 指令一开始就不会捕捉到它……而且由于您已经发布的页面和未发布的页面都由同一个 index.php 处理,因此您不能简单地将其应用于文件级别在这里。 HTTP Auth 也可以在 PHP 中触发和处理……但是,我再次强烈建议您停止在这方面浪费时间,并建立一个 适当的 开发系统,而不是在现场挑选和戳系统。我的汽车的新制动系统在我驾驶时也没有得到开发和测试……

标签: php laravel .htaccess


【解决方案1】:

在你的 routes.php(或 web.php 取决于版本)的顶部试试这个

if (getenv('REMOTE_ADDR') != '192.168.6.3' && !\Request::is('/')) {
    abort(404);
}

如果请求不是主屏幕并且 IP 地址不是我的 IP 地址,则使用 404 中止。

【讨论】:

  • 谢谢保罗。不幸的是,在这种情况下,我只能使用已知 IP 来测试网站。我不确定这是否是完美的解决方案
猜你喜欢
  • 2014-01-08
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 2020-01-13
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
相关资源
最近更新 更多