问题描述
我在名为“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
解决方法
您可以在站点根目录 .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]