Apache .htaccess <Directory not allowed here

dodov picture dodov · Sep 19, 2017 · Viewed 16.6k times · Source

I run XAMPP and I'm trying to learn how .htaccess works. I have a file structure that looks something like this:

/parent
    /foo
    /bar
    .htaccess

I simply want to change all foo requests to bar with a GET parameter appended after them. For example:

foo/
foo/hello.php

turn into:

bar/?test=yes
bar/hello.php?test=yes

When I try to put the <Directory> directive in my .htaccess file:

<Directory "/foo">
    Options +Indexes
</Directory>

I get the following error log:

[Tue Sep 19 17:23:58.356362 2017] [core:alert] [pid 6336:tid 1900] [client ::1:60018] C:/xampp/htdocs/parent/.htaccess: <Directory not allowed here

I checked my httpd.conf file and everything is alright. I'm sure because if I change the contents of the .htaccess file to simply:

Options -Indexes

It correctly displays a 403 error. If I replace the - with +, it shows the directory listing.

What am I doing wrong?

Answer

anubhava picture anubhava · Sep 19, 2017

<Directory> directive is not allowed in .htaccess and for meeting your requirements you don't even need this in .htaccess.

You can use this rule in site root (parent) .htaccess:

RewriteEngine On

RewriteCond %{QUERY_STRING} !(?:^|&)test=yes(?:&|$) [NC]
RewriteRule ^foo/(.*)$ bar/$1?test=yes [NC,QSA,L]