此代码对于多环境设置(暂存、生产等)很有用,它允许您保持 htaccess 文件同步,同时在开发环境或除生产环境之外的任何环境中维护 htpasswd。
#allows a single uri through the .htaccess password protection
SetEnvIf Request_URI "/testing_uri$" test_uri
#allows everything if its on a certain host
SetEnvIf HOST "^testing.yoursite.com" testing_url
SetEnvIf HOST "^yoursite.com" live_url
Order Deny,Allow
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/your/.htpasswd
AuthGroupFile /
Require valid-user
#Allow valid-user
Deny from all
Allow from env=test_uri
Allow from env=testing_url
Allow from env=live_url
Satisfy any
我发现您的 .htaccess 设置非常好,但我发现允许所有然后拒绝暂存更有用。
以下是本文中您内容的反向。
继续努力!
#-- 暂存服务器密码 -------------------------#
SetEnvIf Host yourstagingserver.com passreq
AuthType Basic
AuthName "暂存服务器"
AuthUserFile /home/username/.htpasswd
AuthGroupFile /home/username/.htgroup
Require valid-user
Order allow,deny
Allow from all
Deny from env=passreq
Satisfy any
感谢您提供以上代码。
此外,感谢 Fugazer 提供以上脚本!非常有效。
你好,
我正在尝试做类似的事情,虽然我不确定是否可行。我的服务器上有一个 images 目录,我希望这些图像只能由我的一个 php 页面访问,防止盗链和直接访问。例如
目录
http://www.mysite.com/images/
包含文件:001.jpg / 002.jpg / 等
页面
http://www.mysite.com/images.php?file=001
查看文件 001.jpg
关于如何配置我的 htaccess 文件有任何想法吗?
PS:我不确定这是否重要,因为您正在使用 REQUEST_URI,但我的服务器上有多个域名(例如 http://www.mysite.com 和 http://www.mysite.net)
是的,这正是我从周日以来一直在搜索的。只从一台服务器到一个 URL 的盗链。
@BRAULIO 你找到解决方案了吗??
可以尝试一下这些建议是否对您有效,George
页面中间部分有一节关于盗链图像的内容。
http://www.gwizit.com/articles/getout.php
似乎可以帮助我的网站避免进一步被盗链。
我正在阅读这本书,深入研究 WordPress,我将 index.php 文件复制粘贴到根目录并进行了相应的调整……然后我在管理面板中检查了设置……
但我忘记包含 .htaccess 文件了……我搜索了它……但在核心文件中没有找到它……所以我用 http://www.coffeecup.com 的 .htaccess 软件创建了一个……但是当我刷新页面时……我总是收到一个登录提示,只是为了查看主页……或在管理面板中进行更改……如何包含 .htaccess 而无需每次都“登录”?
非常感谢这篇文章。
我的想法是限制对网站中所有页面的访问,除了 URL 以“/admin”开头的页面。因此,我将以上示例修改为以下内容
现在,URL 为“/admin…”的页面可以正常工作,无需密码,其他页面则需要先进行身份验证。但是,输入密码后,我收到内部服务器错误 (500)。
谁能帮我解决这个问题? :)
非常感谢!继续努力……
这篇文章对我来说也非常有用——有很多类似于上面的示例
http://perishablepress.com/enable-file-or-directory-access-to-your-htaccess-password-protected-site/
我使用了 Fugazer 的示例,但感谢这篇文章和帮助。
非常有用的文章,谢谢!
我目前正在对站点进行 IP 过滤,但我需要允许我的 RSS Feed 通过,或者更确切地说是不进行 IP 过滤。
有没有办法在 htaccess 中创建一个规则来过滤除 Feed 之外的所有内容?
谢谢
只是值得一提的事情。如果您使用上面的示例,但随后也正在将所有内容重写到 index.php(某些 php 框架就是这样),则上述方法不起作用。我不确定确切的原因,但我认为值得一提。
Jeremy,
它确实适用于使用 .htaccess 进行 URL 重写的 PHP 框架。您只需确保此逻辑位于执行 index.php 重写操作之前。
例如,以下内容会保护某个 URL (/admin),但如果它与我的本地主机名匹配,则允许它在没有密码的情况下工作
#允许单个 uri 通过 .htaccess 密码保护
SetEnvIf Request_URI “/testing_uri$” test_uri
#如果在特定主机上,则允许所有内容
SetEnvIf HOST “^testing.yoursite.com” testing_url
SetEnvIf HOST “^yoursite.com” live_url
Order Deny,Allow
AuthName “受限区域”
AuthType Basic
AuthUserFile /path/to/your/.htpasswd
AuthGroupFile /
Require valid-user
#Allow valid-user
Deny from all
Allow from env=test_uri
Allow from env=testing_url
Allow from env=live_url
Satisfy any
我想保护我网站中的一个页面 (www.example.com/extranet/)。
如何使用此代码段来解决此问题?非常感谢您的帮助。
顺便说一下,我使用的是 Apache/2.4.27 (cPanel)(不确定这是否重要)。
有用的文章,但在我的主机使用的 Apache 2.4.x 版本(NearlyFreeSpeech)上,
Allow
不再是有效的指令。如果这对其他人有帮助:我使用 Let’s Encrypt 设置了一个带有 SSL 的站点,后来将整个站点切换为由 htpasswd 保护。这当然会导致 Let’s Encrypt 需要(访问您站点上的 .well-known 目录)的 tlssetup cron 作业失败。
我的快速解决方法是在 .well-known 目录中创建一个 .htaccess 文件,其中只包含一行
Require all granted
。现在整个站点都受到保护,只是排除了此目录。