user1105192
user1105192

Reputation: 412

apache .htaccess rewrite - can I move this into httpd.conf

Below is the only code I have in the .htaccess file with apache 2.2.

I've read that its a performance impact to use a .htacess and better if this this can be run out of httpd.conf. Therefore is it possible for me to add this into httpd.conf? If so where would I put it?

Would it need to go into the VirtualHost for each Host that needed it (in my case a lot of hosts) or could it go generically into httpd.conf so it applies to all hosts?

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

Upvotes: 11

Views: 9400

Answers (3)

Tony Chen
Tony Chen

Reputation: 1844

.htaccess provides configuration for a directory, while httpd.conf provides an overall configuration. Of course, you can move content from .htaccess to httpd.conf. You can find more about .htaccess here: Apache HTTP Server Tutorial: .htaccess files

Take your .htaccess for example:

Contents of .htaccess file in /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>

Section from your httpd.conf file

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

Upvotes: 23

John P
John P

Reputation: 15245

According to the Apache docs you may put the configuration in a .htaccess within a <Directory>-block. http://httpd.apache.org/docs/2.2/howto/htaccess.html

You should avoid using .htaccess files completely if you have access to httpd main server config file. Using .htaccess files slows down your Apache http server. Any directive that you can include in a .htaccess file is better set in a Directory block, as it will have the same effect with better performance.

To ease the administration I would put the rewrite directives in a separate file that is then included in each virtual host. It ought to work.

Upvotes: 2

itsmejodie
itsmejodie

Reputation: 4228

Each VirtualHost needs its own rewrite rules specified, unless:

  1. You specify RewriteOptions inherit within each VirtualHost or
  2. You use an include directive within each VirtualHost

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

Note that rewrite configurations are not inherited by virtual hosts

Upvotes: 2

Related Questions