apache .htaccess rewrite - 我可以将它移到httpd.conf中

时间:2013-06-17 04:51:14

标签: apache .htaccess httpd.conf

以下是我在.htaccess文件中使用apache 2.2的唯一代码。

我已经读过,使用.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>

3 个答案:

答案 0 :(得分:21)

.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>

答案 1 :(得分:2)

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

  1. 您在每个VirtualHost中指定RewriteOptions inherit
  2. 您在每个VirtualHost中使用include指令
  3. 消息来源:https://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteEngine

      

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

答案 2 :(得分:2)

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

  

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

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