Apache .htaccess 为符号链接设置不同的密码

Apache .htaccess 为符号链接设置不同的密码

我获得了一个域名,其中有一个网站可以通过两个 URLmydomain.com/pathA和访问mydomain.com/pathB

但它们实际上是服务器上的同一个目录。它包含一个 MediaWiki 安装,该安装非常大,并且包含应共享的图像文件。但由于我不想将其作为 wiki 本身呈现,因此我希望能够设置不同的钩子、插件、权限、皮肤等。所以现在我创建了一个从 pathA 到 pathB 的符号链接,并在文档根目录中添加了此 .htaccess:

Options -Indexes

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/pathA
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /pathA/index.php?title=$1 [L,QSA]

RewriteCond %{REQUEST_URI} ^/pathB
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /pathB/index.php?title=$1 [L,QSA]

现在我想使用 Apache 身份验证保护 pathB。我可以在这个 .htaccess 文件中执行此操作吗?我无法编辑 httpd.conf。

如果可以在没有符号链接的情况下完成此操作,那么我就可以接受,只要我可以保留单个安装文件夹即可。

答案1

我因为一个反对票而想起了这个问题。我宁愿看到有人投赞成票,或者至少附有建设性的评论,但那没关系。;-)

无论如何,我认为我找到了答案(或者至少是替代解决方案)。这是我现在使用的配置,它工作正常。我使用不同的子域而不是不同的 url 路径。这样做也消除了对符号链接的要求(尽管它们可能本来就不需要)。

我评论了思考正在发生。我花了很多时间进行实验和捣鼓,但对我来说,这仍然有点神奇。无论如何,我希望它有用:

# Create an environment variable if the url matches the/a password protected subdomain.
SetEnvIf Host alternative.example.com passreq
SetEnvIf Host alternative.www.example.com passreq

# Initialize the authentication type.
AuthType Basic
AuthName "Reveil yourself"
AuthUserFile /srv/path/to/.htpasswd
Require valid-user

# By default allow access, only deny when the environment variable 
# is set, to trigger basic authentication in that case.
Order allow,deny
Allow from all
Deny from env=passreq
Allow from 127.0.0.1
Satisfy any

在这方面,我的 .htaccess 的其余部分很简单。它不区分各个子域。我也不再使用符号链接了。现在我只使用上述配置向特定子域添加身份验证,之后请求(任何请求)都只会通过相同的 index.php 进行定向,它会验证 URL 并加载适当的配置。

最终结果很好:我设置了一个 MediaWiki,可以通过两个不同的 URL 进行访问。普通 URL 完全是只读的,缺乏所有编辑工具,而特殊的“管理员”版本允许团队编辑内容。

相关内容