Apache的.htaccess重写 – 我可以移动到httpd.conf

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

我已经读过,它使用.htacess的性能影响,如果这可以用于httpd.conf这会更好。 所以我有可能把这个添加到httpd.conf ? 如果是的话我会放在哪里?

是否需要进入虚拟主机为每个需要它的主机(在我的情况下,很多主机),或者它可以一般到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> 

.htaccess提供了一个目录的配置,而httpd.conf提供了一个全面的配置。 当然,你可以将内容从.htaccess移到httpd.conf 。 您可以在这里找到更多关于.htaccess的信息: Apache HTTP server Tutorial:.htaccess文件

以你的.htaccess为例:

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

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

您的httpd.conf文件中的部分

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

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

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

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

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

根据Apache的文档,你可以把配置放在一个.htaccess的<Directory> -block中。 http://httpd.apache.org/docs/2.2/howto/htaccess.html

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

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