【问题标题】:Using .htaccess to prevent direct URL access to all BUT the index file使用 .htaccess 防止直接 URL 访问所有但索引文件
【发布时间】:2019-08-22 21:33:36
【问题描述】:

我有一个 .htaccess 文件,旨在限制对保留文件夹的访问,该文件夹存储我的域所需的 PHP 代码。为简洁起见,我们称这个文件夹为“PHP”,我的域为“example.com”;换句话说,这个文件夹的 URL 是:

https://www.example.com/PHP/

显然,我不希望用户通过此文件夹进行浏览,因此阻止对该文件夹的所有访问似乎是常识。但是有一个警告:文件夹中的一个文件 可以并且将 由我域上的用户访问 --- 索引文件(因为该文件通过 PHP 运行此保留文件夹中的所有其他文件fopen()函数)。

因此,我需要使用 RewriteRule 来阻止此 URL...

https://www.example.com/PHP/someRandomPHPFile.php

...但不是这些网址:

https://www.example.com/PHP/
https://www.example.com/PHP/index.php

目前,我在 PHP 文件夹的 .htaccess 文件中有这个:

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^https://%{HTTP_HOST} [NC] 
RewriteCond %{HTTP_REFERER} !^http://%{HTTP_HOST}.*$ [NC] 
RewriteRule !^(.*)/$ https://%{HTTP_HOST}/PHP/ [L,R=301,NE]

...但这没有正确重定向,因为每次重定向到索引时,它都会给我一个“嗯...无法访问此页面”屏幕(包括表单提交并重定向到时的索引文件它)。我认为问题在于,当通过 URL 访问索引文件时,它也会重定向。但是,由于我对 .htaccess 文件和 RewriteRules 缺乏经验,我不确定如何解决此问题。

我正在尝试将任何以保留文件夹中的文件为目标的 URL --- 索引文件的外部 --- 重定向回索引,因为索引文件已经根深蒂固地检查到处理所有其他文件的非法和/或非标准表单提交访问。

【问题讨论】:

    标签: .htaccess url-rewriting


    【解决方案1】:

    您不应该匹配推荐人。你应该在 URL 上匹配。

    RewriteEngine On
    
    RewriteCond %{REQUEST_URI} ^/PHP/ [NC]
    RewriteCond %{REQUEST_URI} !^/PHP/$ [NC]
    RewriteCond %{REQUEST_URI} !^/PHP/index.php$ [NC]
    RewriteRule ^.*$ /PHP/ [L,R=301]
    

    【讨论】:

    • 这似乎可行,但 PHP 的 fopen() 函数不适用于此解决方案(这是我用来允许索引文件利用 PHP 文件夹中的其他文件的方法);预计会发生这种情况吗?有没有办法修改这些条件以允许fopen() 访问 PHP 文件夹,但不允许用户通过“插入”URL 来访问?
    • 您应该使用带有fopen() 的路径而不是URL。你可以做fopen("/path/to/PHP/file.php")
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2016-03-04
    • 2019-09-20
    • 2022-10-14
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多