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中的文件必须存在。