我的主要问题是,出于安全原因,我想知道是否可以使用.htaccess虚拟更改网站文件的名称(在某种意义上)。例如,如果我有一个文件/index.php
,并且我希望将/mysite
的调用重定向到/index.php
,但我也想要调用/index.php
返回错误403或404.这可能吗?如果是这样,怎么办呢?
另外,我一直在寻找关于.htaccess指令语法的完整文档,但我找不到任何东西。 我的第二个问题是,是否有人知道所有指令及其语法的良好通用引用? (我甚至在w3schools中找不到一个)
答案 0 :(得分:2)
首先,我首先要说w3schools对任何事情都没有特别好的参考。 Apache mod_rewrite documentation非常好,我总是先去那里。
您的请求的第一部分作为重写非常简单。但在我们到达那里之前,让我们首先阻止对index.php
的直接请求。为了做到这一点而不弄乱我们的其他规则,我们将使用%{THE_REQUEST}
变量来匹配index.php
并禁止访问。
RewriteEngine On
# If the request sent by the browser includes index.php...
RewriteCond %{THE_REQUEST} index\.php
# forbid access (403)
RewriteRule ^. - [F]
# Then you just need a generic rule to rewrite /mysite into index.php
RewriteRule ^mysite index.php [L]
我们需要使用THE_REQUEST
的第一部分来避免与第二部分重写为index.php的冲突。
如果您想提供404以使index.php
看起来不存在,请将[F]
替换为[R=404,L]