Apache2 重写,无需 htaccess

Apache2 重写,无需 htaccess

在阅读有关在 Apache2 中执行 URL 重写的内容时,我发现了这一点:

“一般来说,除非您无权访问主服务器配置文件,否则您永远不应使用 .htaccess 文件。

好的,很好。但是服务器配置文件中没有任何关于如何执行此操作的信息。所以在我弄乱东西之前,我可以安全地使用相同的重写指令吗,例如

<IfModule mod_rewrite.c>    
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule ^test/(\w+)$ test.php?n=$1 [L]
</IfModule>

/etc/apache2/apache2.conf/etc/apache2/httpd.conf是空白的,但我想我也可以在那里做吗?

还有一个问题,重写规则路径是否应该以 为前缀/var/www/,或者我可以相对于站点根目录执行此操作吗?谢谢。

答案1

我不一定同意他们的观点原因声称您应该避免使用 .htaccess 文件。他们的理由是:

  • 原因 1 是性能 - Apache 需要在运行时扫描目录并读取和解析 .htaccess 文件。这不是很大的负担,而且缓存效果很好。

  • 原因 2 是安全性。您允许用户修改 Apache 的配置。但他们只能修改该特定目录的本地配置,并且可以在 Apache 的全局配置中指定他们可以修改和不允许修改的指令。此外,如果用户有权编辑 .htaccess 文件对您来说是一个安全问题,那么允许相同的用户使用 .php 文件肯定是一个更大的安全问题。

使用 .htaccess 仍然有一些好处。它现在在某种程度上已成为事实上的标准,因此您几乎可以依赖它在共享主机上使用它,而且许多 Web 应用程序软件包都在自己的软件中使用它们。这意味着本地 Apache 配置与它所配置的应用程序一起保存,这可能有利于备份、版本控制等。

无论如何,是否要听从这个建议取决于你。

如果你确实想使用 Apache 的全局配置,你可以按照你的例子去做。

但是,全局apache2.conf文件可能有点混乱,而且它是由 Apache2 包本身安装的。为了获得更便携的解决方案,请将规则放入单独的配置文件中:

  • Apache2 读取 中的所有配置文件/etc/apache2/conf.d/。这对于您想要添加的任何与任何特定虚拟主机无关的一般配置指令非常有用。只需在那里添加一个新文件并将配置放入其中即可。

  • Apache2 将每个虚拟主机的配置文件存储在 中/etc/apache2/sites-available/。建议将每个虚拟主机的配置放在单独的文件中。然后,使用 和 启用和禁用这些虚拟a2ensite主机a2dissite

    假设这些配置指令专门适用于某个虚拟主机,我会选择后者 - 将其放在您为该虚拟主机配置的任何地方(我建议将其放在/etc/apache2/sites-available/.

相关内容