【问题标题】:.htaccess to rewrite rules and block file access for specific folder.htaccess 重写规则并阻止特定文件夹的文件访问
【发布时间】:2021-06-19 13:01:21
【问题描述】:

我在名为“members”的子文件夹中有一个迷你 PHP 应用程序,所以 domain.com/members

在这个迷你应用程序中,我在 .htaccess 文件中有以下内容来重定向 URL,例如 domain.com/members/categories/some-category 或 domain.com/members/login 等。

RewriteEngine On
RewriteBase /

# allow passthru to existing files/dirs
RewriteCond %{REQUEST_URI} !^/members/app  [OR]
RewriteCond %{REQUEST_URI}  ^/members/app/assets
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+) - [PT,L]

# everything else rewrite
RewriteRule ^(.*) members/index.php

这允许我的资产文件夹加载(CSS、JavaScript 和图像)并允许任何实际的文件 URL。但是,我们现在有一个文件夹,其中包含我们现在需要保护的文件。

因此,如果有人要访问 domain.com/members/files/filename.pdf 这将是服务器上的实际文件,我们需要将此 URL 重写到 members/index.php 文件中,因为我们需要检查权限在允许下载之前在文件上。

每当我尝试删除以下行时,一切都会中断:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    您可以在站点根目录 .htaccess 中使用此代码:

    RewriteEngine On
    
    RewriteRule ^members/index\.php$ - [L,NC]
    
    RewriteRule ^members/files/ members/index.php [L,NC]
    
    RewriteCond %{REQUEST_URI} !^/members/app/assets [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ members/index.php [L]
    

    【讨论】:

    • 不,事实上它破坏了一切,根本没有任何工作
    • 你在浏览器中输入了什么网址你看到了什么错误?
    • 它打破了我所有的其他重写。所以 domain.com/members/category/5 返回了 403 错误,我的应用程序中的其他页面都没有工作 - 都是 403 错误。在其余的重写规则开始之前,我能够使用将所有成员/文件/(。*)URL重写到登录页面的想法。
    • 这些规则中没有403生成指令。希望您没有在此代码中使用任何其他现有规则。` domain.com/members/category/5` 应使用上述规则重写为domain.com/members/index.php
    猜你喜欢
    • 2013-10-05
    • 2013-11-27
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2012-11-22
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多