【问题标题】:htaccess rewrite and auth conflicthtaccess 重写和身份验证冲突
【发布时间】:2013-11-27 22:20:20
【问题描述】:

我有 2 个目录,每个目录都有一个 .htaccess 文件:

html/.htaccess - 在这个文件中有一个重写,几乎所有的东西都发送到 url.php

RewriteCond %{REQUEST_URI} !(exported/?|\.(php|gif|jpe?g|png|css|js|pdf|doc|xml|ico))$
RewriteRule (.*)$ /url.php [L]

和 html/exported/.htaccess

AuthType Basic
AuthName "exported"
AuthUserFile "/home/siteuser/.htpasswd"
require valid-user

如果我删除 html/exported/.htaccess 重写工作正常并且可以访问导出的目录。如果我删除 html/.htaccess 身份验证工作正常。

但是,当我将两个 .htaccess 文件都导出/被重写为 /url.php 时。有什么办法可以预防吗?

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    据我了解,出现“404”错误是因为 Apache 找不到“需要 401 身份验证”页面。所以我只是通过创建 html/401.html 来解决它,并添加

    ErrorDocument 401 /401.html

    到我的 html/.htaccess

    提示来自http://drupal.org/node/52465#comment-106353

    【讨论】:

      【解决方案2】:

      我认为您的正则表达式可能是这个意思:

      RewriteCond %{REQUEST_URI} !(^exported/?|\.(php|gif|jpe?g|png|css|js|pdf|doc|xml|ico)$)
      RewriteRule (.*)$ /url.php [L]
      

      html/exported/exported/ 是否可以在您当前的设置中正常工作?

      【讨论】:

        【解决方案3】:

        如果以上都不适用于您的场景,也可以使用 php 脚本完成基本身份验证

        <?php
        session_start();
        if (isset($_SESSION['newlogin'])) { 
        unset($_SESSION['newlogin']);
        unset($_SESSION['loggedout']);
        };
        $valid_passwords = array ("admin" => "mypass");
        $valid_apasswords = array ("admin" => "mypass");
        $valid_users = array_keys($valid_passwords);
        $valid_admin = array_keys($valid_apasswords);
        
        $user = $_SERVER['PHP_AUTH_USER'];
        $pass = $_SERVER['PHP_AUTH_PW'];
        
        $avalidated = (in_array($user, $valid_admin)) && ($pass == $valid_apasswords[$user]);
        $uvalidated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
        $validated = (($uvalidated == true) || ($avalidated == true)) ;
        
        if (!$validated || isset($_SESSION['loggedout'])) {
                $_SESSION['newlogin'] = true;
                header('WWW-Authenticate: Basic realm="Login Area"');
                header('HTTP/1.0 401 Unauthorized');
                ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
        </head>
        
        <body>
        <div id="messagebox">Authorisation Required.</div>
        </body>
        </html>
                <?php
                exit;
        };
        
        ?>
        

        【讨论】:

          【解决方案4】:

          如果您不需要在 /html/exported/ 中进行任何重写,为什么不关闭该文件夹中的重写引擎: 重写引擎关闭

          【讨论】:

            猜你喜欢
            • 2011-10-25
            • 2011-12-28
            • 2012-12-06
            • 1970-01-01
            • 2018-02-03
            • 2017-11-24
            • 2020-06-19
            • 1970-01-01
            • 2011-11-30
            相关资源
            最近更新 更多