10

以下是我在.htaccessapache 2.2 文件中的唯一代码。

我已经读到使用 a 会对性能产生影响,.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>
4

3 回答 3

23

.htaccess为目录提供配置,而 httpd.conf 提供整体配置。当然,您可以将内容从 移动.htaccesshttpd.conf. 您可以在此处找到有关 .htaccess 的更多信息:Apache HTTP 服务器教程:.htaccess 文件

以您的 .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>
于 2013-06-17T05:02:52.473 回答
2

每个 VirtualHost 都需要指定自己的重写规则,除非:

  1. RewriteOptions inherit在每个 VirtualHost 中指定或
  2. 您在每个 VirtualHost 中使用一个include指令

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

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

于 2013-06-17T04:58:32.773 回答
2

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

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

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

于 2013-06-17T04:59:03.177 回答