2

我想限制对特定文件(ucp.php)的访问,但仅限于注册模式。即,有人必须进行身份验证才能注册,但一旦注册,就可以访问其他 ucp.php 功能(例如配置文件编辑),而无需再次进行身份验证。

由于 ucp.php 是唯一具有“注册”模式的文件,因此我尝试过:

<Files "^(.*)mode=register$">
require valid-user
</Files>

到目前为止,无论功能如何,我都只能限制访问,或者根本不能。我对如何做到这一点的任何替代建议持开放态度。谢谢!

编辑

我也试过:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.*)mode=register(.*)$ [NC]
RewriteRule require valid-user

这也不起作用,但正如您可能会说的那样,我只是在拼凑一些东西,试图让它发挥作用。

有什么建议么?

4

1 回答 1

0

你想要做的事情并不简单。您希望对单个文件进行 HTTP 身份验证,但前提是存在mode=register查询字符串。mod_auth 指令根本无法处理这样的事情。

您需要做的是创建一个新的 php 文件,其中包含ucp.php,我们称之为ucp_register.php,它只是ucp.php在本地文件系统中执行该文件,并将mode=register查询字符串传递给它。然后,我们强制对ucp_register.php.

<Files "ucp_register.php">
    AuthUserFile /path/to/htpasswd
    AuthName "Password Protected"
    AuthType Basic

    Require valid-user
</Files>

然后,我们以注册模式拦截请求ucp.php,并在内部将其重写为ucp_register.php,这需要一个有效用户,这意味着浏览器被提示进行身份验证,但浏览器仍然认为它的请求ucp.php?mode=register。身份验证后,ucp_register.php加载文件,加载ucp.php并进行注册。要进行重写,您需要:

RewriteCond %{QUERY_STRING} mode=register
RewriteRule ^ucp\.php$ /ucp_register.php [L]  

可能需要解决一些细节才能使其正常工作,但这是总体思路。

例如,该ucp_register.php文件可能看起来很简单:

<?php
include('ucp.php');
?>
于 2013-09-12T04:44:52.983 回答