apache .htaccess 重写 - 我可以把它移到 httpd.conf
Posted
技术标签:
【中文标题】apache .htaccess 重写 - 我可以把它移到 httpd.conf【英文标题】:apache .htaccess rewrite - can I move this into httpd.conf 【发布时间】:2013-06-12 23:58:13 【问题描述】:下面是我在 apache 2.2 的 .htaccess
文件中拥有的唯一代码。
我了解到使用.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>
【问题讨论】:
【参考方案1】:.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>
【讨论】:
是的,当然。引用上述网站:如果您有权访问 httpd 主服务器配置文件,则应完全避免使用 .htaccess 文件。使用 .htaccess 文件会降低 Apache http 服务器的速度。您可以在 .htaccess 文件中包含的任何指令都最好设置在 Directory 块中,因为它具有相同的效果并具有更好的性能。【参考方案2】:每个虚拟主机都需要指定自己的重写规则,除非:
-
您在每个 VirtualHost 中指定
RewriteOptions inherit
或
您在每个 VirtualHost 中使用 include
指令
来源:https://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteEngine
请注意,虚拟主机不会继承重写配置
【讨论】:
【参考方案3】:根据 Apache 文档,您可以将配置放在 <Directory>
-block 内的 .htaccess 中。 http://httpd.apache.org/docs/2.2/howto/htaccess.html
如果您有权访问 httpd 主服务器配置文件,则应完全避免使用 .htaccess 文件。使用 .htaccess 文件会降低 Apache http 服务器的速度。您可以在 .htaccess 文件中包含的任何指令都最好设置在 Directory 块中,因为它具有相同的效果并具有更好的性能。
为了简化管理,我将重写指令放在一个单独的文件中,然后包含在每个虚拟主机中。它应该可以工作。
【讨论】:
以上是关于apache .htaccess 重写 - 我可以把它移到 httpd.conf的主要内容,如果未能解决你的问题,请参考以下文章
DirectAdmin Apache - .htaccess 重写