apache .htaccess 重写 - 我可以把它移到 httpd.conf

Posted

技术标签:

【中文标题】apache .htaccess 重写 - 我可以把它移到 httpd.conf【英文标题】:apache .htaccess rewrite - can I move this into httpd.conf 【发布时间】:2013-06-12 23:58:13 【问题描述】:

下面是我在 apache 2.2 的 .htaccess 文件中拥有的唯一代码。

我了解到使用.htacess 会影响性能,如果可以用完httpd.conf,效果会更好。因此我可以将其添加到httpd.conf 中吗?如果是这样,我会把它放在哪里?

是否需要为每个需要它的主机(在我的情况下是很多主机)进入 VirtualHost,或者它是否可以一般地进入 httpd.conf 以便适用于所有主机?

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %REQUEST_FILENAME !-f
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_FILENAME !-l
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

【问题讨论】:

【参考方案1】:

.htaccess 提供目录配置,而 httpd.conf 提供整体配置。当然,您可以将内容从.htaccess 移动到httpd.conf。 您可以在此处找到有关 .htaccess 的更多信息:Apache HTTP Server Tutorial: .htaccess files

以您的 .htaccess 为例:

/www/htdocs/example 中 .htaccess 文件的内容

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %REQUEST_FILENAME !-f
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_FILENAME !-l
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

httpd.conf 文件中的部分

<Directory /www/htdocs/example>
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %REQUEST_FILENAME !-f
        RewriteCond %REQUEST_FILENAME !-d
        RewriteCond %REQUEST_FILENAME !-l
        RewriteRule ^(.*)$ index.php?/$1 [L]
    </IfModule>
</Directory>

【讨论】:

是的,当然。引用上述网站:如果您有权访问 httpd 主服务器配置文件,则应完全避免使用 .htaccess 文件。使用 .htaccess 文件会降低 Apache http 服务器的速度。您可以在 .htaccess 文件中包含的任何指令都最好设置在 Directory 块中,因为它具有相同的效果并具有更好的性能。【参考方案2】:

每个虚拟主机都需要指定自己的重写规则,除非:

    您在每个 VirtualHost 中指定 RewriteOptions inherit 或 您在每个 VirtualHost 中使用 include 指令

来源:https://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteEngine

请注意,虚拟主机不会继承重写配置

【讨论】:

【参考方案3】:

根据 Apache 文档,您可以将配置放在 &lt;Directory&gt;-block 内的 .htaccess 中。 http://httpd.apache.org/docs/2.2/howto/htaccess.html

如果您有权访问 httpd 主服务器配置文件,则应完全避免使用 .htaccess 文件。使用 .htaccess 文件会降低 Apache http 服务器的速度。您可以在 .htaccess 文件中包含的任何指令都最好设置在 Directory 块中,因为它具有相同的效果并具有更好的性能。

为了简化管理,我将重写指令放在一个单独的文件中,然后包含在每个虚拟主机中。它应该可以工作。

【讨论】:

以上是关于apache .htaccess 重写 - 我可以把它移到 httpd.conf的主要内容,如果未能解决你的问题,请参考以下文章

PHP/Apache:用 .htaccess 重写规则

DirectAdmin Apache - .htaccess 重写

Apache在子目录中重写htaccess

apache重写

您是不是必须重新启动apache才能使.htaccess中的重写规则生效?

apache的重写规则