让http://test.server/
成为我当前用于测试目的的Web服务器,然后我在其中有一个名为Homepage
的文件夹,其中包含主页的代码(duh。)。在Homepage
文件夹中有一些文件夹(例如Templates
),其.htaccess
个文件包含deny from all
。在Homepage
中,我确实有一个很长的.htaccess
以及以下内容:
<IfModule mod_speling.c>
CheckSpelling off
CheckCaseOnly off
</IfModule>
Options -MultiViews
RewriteEngine On
RewriteBase /Homepage
ErrorDocument 403 /Homepage/403
ErrorDocument 404 /Homepage/404
# Block direct access to files and directories in these directories
RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|bmp|png|tiff|css|js|ico)$ [NC]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(Forbidden) - [NC,F]
# Deny access to configuration files
<Files ~ "\.ini">
Order allow,deny
Deny from all
</Files>
# Remove index.php
RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^(.*?)index\.php$ /$1 [L,R=301,NC,NE]
# Redirect Trailing Slashes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?page=$1&id=$2 [L,QSA,NC]
RewriteRule ^([\w-]+)?/?$ index.php?page=$1 [L,NC,QSA]
因此,当我尝试访问http://test.server/Homepage/Templates/
时,这会调用403错误,并且ErrorDocument
所描述的指定/Homepage/403
已正确显示(并由我的后端解析),同时仍在{{1}上1}}。
但是,当我尝试访问受保护文件夹的子字符串的网址时,如http://test.server/Homepage/Templates/
,http://test.server/Homepage/Template/
等服务器重定向(!)到http://test.server/Homepage/Temp/
或http://test.server/Template/
并显示由于我在根文件夹中没有http://test.server/Temp/
而未设置的通用404文档。我期待404的.htaccess
显示为403正确,但仍然在ErrorDocument
。这意味着这甚至没有发送到我的http://test.server/Homepage/Temp/
中的处理程序,而是直接由Apache处理,它似乎试图在根文件夹中找到一些回退规则。
我在index.php
中犯了什么错误?
答案 0 :(得分:1)
问题源于此# Redirect Trailing Slashes
规则。
您可以使用以下内容替换该规则:
# Redirect Trailing Slashes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/$
RewriteRule ^ %1 [L,R=301,NE]
在测试此更改之前清除浏览器缓存。