On Wed, May 21, 2025 at 1:12 PM J Lance Wilkinson <jl...@psu.edu> wrote:

>
> On 5/21/2025 1:07 PM, Frank Gingras wrote:
>
>
>
> On Wed, May 21, 2025 at 12:19 PM J Lance Wilkinson <jl...@psu.edu> wrote:
>
>> I have a directory /PMHS72/ which contains a few .html and .php files
>> that I want to present, and all other files in the directory are blocked.
>>
>> I need to rewrite requests for the files in the directory to redirect
>> any explicit requests for files in the directory, UNLESS they are those
>> few whitelisted files, to be sent to one specific one of those
>> whitelisted .php files as a parameter.
>>
>> Here's my configuration -- directory and rewrite rules.
>>
>>      RewriteEngine On
>>      LogLevel alert rewrite:trace5
>>
>>      # Allow direct access to whitelisted PHP and HTML files
>>      RewriteCond %{REQUEST_URI}
>> ^/PMHS72/(index|gateway|verify|CodePreview|wrapper|roster)\.php$ [NC,OR]
>>      RewriteCond %{REQUEST_URI} ^/PMHS72/(privacy|terms)\.html$ [NC]
>>      RewriteRule ^ - [L]
>>
>>      # Rewrite everything else under /PMHS72/ to go through wrapper.php
>>      #RewriteRule ^PMHS72/(.*)$ /PMHS72/wrapper.php?file=$1 [QSA,L]
>>      RewriteRule ^/?PMHS72/(.*)$ /PMHS72/wrapper.php?file=$1 [QSA,L]
>>
>>
>>
>>      <DirectoryMatch "^/var/www/html/PMHS72/?$">
>>          Options +Indexes
>>          Require all granted
>>      </DirectoryMatch>
>>
>>      <Directory "/var/www/html/PMHS72">
>>          Require all denied
>>
>>          # Expose all whitelisted files
>>          <FilesMatch
>> "^(index|gateway|verify|CodePreview|wrapper|roster)\.php$">
>>              Require all granted
>>          </FilesMatch>
>>
>>          <FilesMatch "^(privacy|terms)\.html$">
>>              Require all granted
>>          </FilesMatch>
>>
>>          DirectoryIndex index.php
>>
>>      </Directory>
>>
>> Any attempt to reach /PMHS72/PMHS-72%20Alumni%20Roster.pdf SHOULD be
>> rewritten to to this:
>>
>> /PMHS72/wrapper.php?file=PMHS-72%20Alumni%20Roster.pdf
>>
>> Instead I'm getting a server default 403 response, and even though I've
>> got rewrite set to trace 5 I'm getting NO error log entries.
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org
>> For additional commands, e-mail: users-h...@httpd.apache.org
>>
>>
> What context are the rules defined in?  The vhost, directly?
>
>         In the general configuration.  The VHOST is defined but this
> entire configuration is part of the general definitions outside the vhost
> block.
>
> If so, RewriteRule ^/? doesn't make sense, as you'll always see the
> leading slash.
>
>         Likely true.  But DOES IT HURT my requirement?
>
> Lastly, if you have more than one vhost, run apachectl -S and make sure
> the correct vhost is being accessed / edited.
>
>         Only ONE VHOST defined.    And the entire server is inside a
> Synology Container Manager (Docker) container with no shell access so I
> don't have control over the apachectl command.
>
>         One suggestion has been to open up the protection "temporarily" to
> get the rewrite rules to apply and then lock things down after:
>
> <Directory "/var/www/html/PMHS72">
>     Options +Indexes
>     AllowOverride None
>
>     # Allow access to trigger rewrite rules, but only internally
>     Require all granted
>
>     # Immediately deny access to files not explicitly allowed
>     <FilesMatch
> "^(?!wrapper\.php$|index\.php$|gateway\.php$|verify\.php$|CodePreview\.php$|privacy\.html$|terms\.html$).+$">
>         Require all denied
>     </FilesMatch>
>
>     DirectoryIndex index.php
> </Directory>
>
> Going to try that now.
>

If you define your rules in the server context, you need to add
RewriteOptions inherit in every vhost you want to apply them to.

Reply via email to