Apache .htaccess <directory not =“”allowed =“”here =“”

时间:2017-09-19 14:35:34

标签: apache .htaccess mod-rewrite httpserver apache-config

=“”

我正在运行XAMPP而我正在努力学习如何.htaccess工作。我的文件结构如下所示:

scp -r -p /Users/me/files/dump.sql user@server:/var/www/private
mysql -hxxx -uxxx -pxxx dbname < dump.sql

我只想将所有/parent /foo /bar .htaccess 个请求更改为foo,并在其后附加GET参数。例如:

bar

变成:

foo/
foo/hello.php

当我尝试将bar/?test=yes bar/hello.php?test=yes 指令放在我的.htaccess文件中时:

<Directory>

我收到以下错误日志:

  

[Tue Sep 19 17:23:58.356362 2017] [core:alert] [pid 6336:tid 1900] [client :: 1:60018] C:/xampp/htdocs/parent/.htaccess:&lt; Directory not允许在这里

我检查了我的httpd.conf文件,一切正常。我敢肯定,因为如果我将.htaccess文件的内容更改为:

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

它正确显示403错误。如果我将Options -Indexes 替换为-,则会显示目录列表。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

.htaccess中不允许使用

<Directory>指令,并且为了满足您的要求,您甚至不需要.htaccess。

您可以在网站根目录(父级).htaccess中使用此规则:

RewriteEngine On

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

答案 1 :(得分:1)

根据{{​​3}},<Directory..中不允许

.htaccess。您只能在服务器配置和虚拟主机中使用它。您应该使用mod_rewrite代替。

答案 2 :(得分:0)

简短回答:只需删除.htaccess文件,您的error.log问题就会消失。

更长的答案:

我今天早些时候在C:\ xampp \ apache \ logs \ error.log文件中开始收到相同的消息。错误突然开始(经过多年使用localhost之后没有遇到麻烦)并且恰好出现了&#34; 500服务器错误&#34;当我试图启动localhost时。

.htcaccess文件的内容(今天第一次出现在我的/ Sites目录中)是:

<Directory>
  AllowOverride All
  Order allow,deny
</Directory>

正如其他人就类似的.htcaccess问题所指出的那样,通常不需要该文件。

因此我只是删除了.htcaccess文件,它立即解决了问题。 localhost立即开始工作,错误从日志中消失了!