使用.htaccess更改文件名

时间:2013-01-25 15:18:28

标签: apache .htaccess mod-rewrite

我的主要问题是,出于安全原因,我想知道是否可以使用.htaccess虚拟更改网站文件的名称(在某种意义上)。例如,如果我有一个文件/index.php,并且我希望将/mysite的调用重定向到/index.php,但我想要调用/index.php返回错误403或404.这可能吗?如果是这样,怎么办呢?
另外,我一直在寻找关于.htaccess指令语法的完整文档,但我找不到任何东西。 我的第二个问题是,是否有人知道所有指令及其语法的良好通用引用? (我甚至在w3schools中找不到一个)

1 个答案:

答案 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]