我有一个网站,其网址使用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>
答案 0 :(得分:0)
今天早上我运行了自动服务器更新软件(仅更新服务器 的插件)并重新启动Apache。
Apache没有更新(所以仍然是相同的版本),但各种插件已更新,重新启动Apache后问题已消失。
我仍然不知道是什么导致了Apache的明显混乱。