【问题标题】:.htaccess authentication w/ friendly url.htaccess 身份验证,带有友好的 url
【发布时间】:2014-08-05 01:56:56
【问题描述】:

我正在尝试设置我的 .htaccess 文件以在我们的开发网站上启用基本身份验证。

我希望身份验证在我的所有网站上都有效,但特定 URL 除外。我们在我们的网站上使用友好的 URL..

我还想绕过对某些文件类型(如 png、css 等)的身份验证...

我目前的样子是这样的:

SetEnvIfNoCase Request_URI ^/upload/ NO_AUTH
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/.htpasswd
Require valid-user
Satisfy  any
Order deny,allow
Deny from all
Allow from env=NO_AUTH
<FilesMatch "\.(gif|jpe?g|png|css|js|swf)$">
    Satisfy Any
</FilesMatch>

身份验证工作正常,但SetEnvIfNoCase 似乎不起作用,因为在转到友好 URL '/upload/' 时仍然要求我进行身份验证。 FilesMatch 部分似乎也不起作用..

有人可以帮我吗?

谢谢!

【问题讨论】:

    标签: php .htaccess authentication friendly-url


    【解决方案1】:

    您需要解决两件事。

    1. 您的 &lt;FilesMatch&gt; 容器什么也没做。您已经有一个Satisfy Any。您应该将这些扩展添加到单独的SetEnvIfNoCase

    2. 当您使用重写 /upload/ 的重写规则时,您需要包含 both“友好”URI以及重写的 URI,因为 auth 模块在每一步都应用(显然,因为允许通过重写/别名绕过身份验证真的很糟糕)。这意味着,例如,如果你有这个规则:

      RewriteRule ^upload/(.*)$ /upload_script.php?file=$1 [L]
      

    那么你需要为 both /upload//upload_script.php 设置一个 NO_AUTH 行:

    SetEnvIfNoCase Request_URI ^/upload/ NO_AUTH
    SetEnvIfNoCase Request_URI ^/upload_script.php NO_AUTH
    

    然后到地址#1:

    SetEnvIfNoCase Request_URI \.(gif|jpe?g|png|css|js|swf)$ NO_AUTH
    

    建议的一个例子:

    您可以尝试添加一条规则(类似于上面的RewriteRule 示例),将/upload/ 路由到index.php 以外的中间脚本,然后从中间脚本调用index.php .

    因此,使用上面的 /upload_script.php 示例,您将在您的任何规则之前添加此

    RewriteRule ^upload/ /upload_script.php [L]
    

    所以它看起来像:

    RewriteEngine On 
    
    RewriteRule ^upload/ /upload_script.php [L]
    
    RewriteCond %{REQUEST_FILENAME} -s [OR] 
    RewriteCond %{REQUEST_FILENAME} -l [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^.*$ - [NC,L] 
    
    RewriteRule ^.*$ index.php [NC,L]
    

    然后,您创建一个名为 upload_script.php 的脚本,其内容如下:

    <?php
      include_once "index.php";
    ?>
    

    您可能想先转储 $_SERVER[''] 数组,看看是否一切都设置为 Zend 的 index.php 期望看到的。

    【讨论】:

    • 感谢您的回答。我用你的建议解决了#1,但我对#2 有问题,因为我使用的是 Zend Framework,我必须允许我的引导程序“index.php”,这将删除所有身份验证。您对此有其他建议吗?顺便说一句,我不能赞成你的回答,因为我没有足够的声誉:/
    • @Jeff 我对 Zend 或您的设置不是很熟悉,但是您可以尝试添加一条规则(类似于上面的 RewriteRule 示例,路由 /upload/index.php以外的中间脚本,然后从中间脚本调用index.php
    • 我对如何进行这项工作感到困惑,因为我已经有了一些 RewriteCondRewriteRule。我目前有以下代码:RewriteEngine OnRewriteCond %{REQUEST_FILENAME} -s [OR]RewriteCond %{REQUEST_FILENAME} -l [OR]RewriteCond %{REQUEST_FILENAME} -dRewriteRule ^.*$ - [NC,L]RewriteRule ^.*$ index.php [NC,L]你认为你能告诉我如何将你的建议与该代码混淆吗?
    猜你喜欢
    • 2014-02-26
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2014-10-04
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多