以下是我在.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>
答案 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都需要指定自己的重写规则,除非:
RewriteOptions inherit
或include
指令消息来源: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文件中的任何指令都可以在目录块中更好地设置,因为它具有相同的效果和更好的性能。
为了简化管理,我会将重写指令放在一个单独的文件中,然后包含在每个虚拟主机中。它应该工作。