【发布时间】: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 中触发和处理……但是,我再次强烈建议您停止在这方面浪费时间,并建立一个 适当的 开发系统,而不是在现场挑选和戳系统。我的汽车的新制动系统在我驾驶时也没有得到开发和测试……