Apache:澄清文件/目录的存在

时间:2017-03-23 18:22:48

标签: apache .htaccess mod-rewrite

我有一个网站,其网址使用mod_rewrite来重写文件(所有文件都在同一个文件夹中)。

网址是这样的形状:/sales/<category>

这由以下mod_rewrite翻译:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^sales/([a-z0-9A-Z\-]+)/?$ /sales/boatlist.php?folder=$1 [NC,L]

因此服务器上的目标文件是:

/sales/boatlist.php?folder=yachts

但是,这是我的问题。

当请求这个确切的类别(sales/yachts)时,加载的页面是apache 禁止 回复,并且根本没有加载PHP ; boatlist.php未被调用。我从中推断出目录中有一个文件或文件夹(因此通过mod_rewrite转出RewriteCond),标记为禁止, 但是在服务器上没有文件/文件夹存在此名称,并且没有其他mod_rewrites会相关(并且即使他们这样做也不应该返回403禁止回复)。

我发现服务器错误日志说明:

  

AH01630:客户端被服务器配置拒绝:/ farm / site / public / sales / yachts

并且显然researched this error并且发现它似乎不适用,因为我的Apache版本是2.4.25(并且已经安装了很长时间)并且具有当前的httpd。 conf:

<Directory "/var/www/html">
    Options All
    AllowOverride None
    Require all granted
</Directory>

据我所知,最近几天没有任何更新突然导致此问题,但更重要的是,问题只发生在特定的网址上;不适用于任何其他网址,不论是否重写。

  

http://site.co.uk/sales/dinghies有效。
  当没有文件存在时,http://site.co.uk/sales/yachts返回错误403。

我可以做些什么来进一步调查和确定(解决)这里发生了什么?

(手动输入时,(重写的)网址到达的PHP文件完美无缺。)​​

修改

完整.htaccess档案:

RewriteEngine On
ErrorDocument 404 /index.php?msg=404
ErrorDocument 403 /index.php?msg=403
ErrorDocument 500 /index.php?msg=500
Options -Indexes

#Set asset items to cache for 1 week.
<FilesMatch "\.(gif|jpe?g|png|ico|css|js|swf)$">
     Header set Cache-Control "max-age=1972800, public, must-revalidate"
</FilesMatch>

#force requests to begin with a slash.
RewriteCond  %{REQUEST_URI}  !^$
RewriteCond  %{REQUEST_URI}  !^/
RewriteRule  .*              -    [R=403,L]

#disabled for subdomain
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS} off
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

#if not a file or dir then use as a boat details page variable.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^boats/(\d+)-?([\w-]+)/?$  /sales/boatdetails.php?boatid=$1 [NC,L]

#if not a file or dir then use as a boatlist page variable.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^sales/([a-z0-9A-Z\-]+)/?$ /sales/boatlist.php?folder=$1 [NC,L]

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

<Files php.ini>
Require all denied
</Files>

<LimitExcept GET POST HEAD>
    deny  from all
</LimitExcept>

1 个答案:

答案 0 :(得分:0)

今天早上我运行了自动服务器更新软件(仅更新服务器 的插件)并重新启动Apache。

Apache没有更新(所以仍然是相同的版本),但各种插件已更新,重新启动Apache后问题已消失。

我仍然不知道是什么导致了Apache的明显混乱。