Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache .htaccess重写规则将禁止403访问,除非输入文件名存在_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache .htaccess重写规则将禁止403访问,除非输入文件名存在

Apache .htaccess重写规则将禁止403访问,除非输入文件名存在,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我有一个非常简单的测试规则: RewriteRule ^foo$ index.php 除非我创建文件: > touch foo > chmod o+r foo 当我尝试加载/foo时,即使存在index.php,服务器也会简单地返回一个403禁止的 我猜在应用我的规则之前,需要进行一些检查,看看文件是否存在,是否可读。这似乎才刚刚开始成为一个问题。可能是服务器中有人更改的标志吗?我没有访问配置的权限,是否可以在.htaccess中设置一些选项来忽略初始检查 [编辑] 好的,这是

我有一个非常简单的测试规则:

RewriteRule ^foo$ index.php
除非我创建文件:

> touch foo
> chmod o+r foo
当我尝试加载
/foo
时,即使存在
index.php
,服务器也会简单地返回一个
403禁止的

我猜在应用我的规则之前,需要进行一些检查,看看文件是否存在,是否可读。这似乎才刚刚开始成为一个问题。可能是服务器中有人更改的标志吗?我没有访问配置的权限,是否可以在
.htaccess
中设置一些选项来忽略初始检查


[编辑]
好的,这是我完整的
.htaccess
文件和其他所有文件

RewriteEngine On
RewriteBase /~myusername/
RewriteRule ^foo$ index.php
index.php
只是一个空文件。权限已设置,我可以直接访问它,也可以在如上所述创建
foo
时访问它


[编辑]

经进一步调查,
403禁止
仅在目录缺少读取权限时发生(
drwx--x
失败,
`drwx--w-x
工作)。

我不知道为什么我需要对目录的读取权限,特别是考虑到我不想启用目录索引。我只能猜测某个地方的脚本无法获得目录列表,并停止了通常会继续成功重写URL的过程

无论如何,作为一种解决办法:

chmod o+r .

你好,你能试试这个吗

RewriteEngine On
RewriteBase /~myusername/    
RewriteRule ^foo/$ index.php

请让我知道它是否有效。

能否显示完整的.htaccess。问题可能出在其他一些规则中。为什么要重写
RewriteBase/~myusername/
?什么是foo的完整URL?@anubhava,因为服务器是为html目录设置的。我使用
http://domain.com/~myusername/foo
。有趣的是,规则中没有强制
/foo
成为有效文件的内容。@anubhava似乎只有在目录缺少读取权限时才会发生这种情况,直到出现同样的问题。我认为管理员一定对服务器配置做了一些奇怪的事情。您的服务器上是否启用了Apache重写?似乎对其他一切都有效,只是没有目录读取权限,原始URL中的文件必须存在。