apache配置优化之伪静态设置

摘要:两种方法 Apache伪静态配置方法有两种: 在网站根目录下添加文件,.htaccess,在此文件内写伪静态规则,使用它需要在apache配置文件http.conf中完成相应配置.具体配置方法网上很多,这里不再赘述. 而另一种是直接在httpd.conf中使用.这种方法性能高于前者。 应用场景 (1),采用.htaccess的场景 用户需要针对特定目录改变服务器的配置而又没有root权限的情况下,可以通过....

两种方法

Apache伪静态配置方法有两种:

002UASMrzy7605pjKJv15&690.jpg

在网站根目录下添加文件,.htaccess,在此文件内写伪静态规则,使用它需要在apache配置文件http.conf中完成相应配置.具体配置方法网上很多,这里不再赘述.

而另一种是直接在httpd.conf中使用.这种方法性能高于前者。

应用场景

(1),采用.htaccess的场景

用户需要针对特定目录改变服务器的配置而又没有root权限的情况下,可以通过.htaccess文件实现。

如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置.比如ISP,在同一个机器上运行了多个用户站点,希望用户可以自己改变配置,便可以配置好apache,开启对.htaccess文件的支持即可.

(2),不采用.htaccess的场景

虽然上述步骤1可以实现,但一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件(http.conf)的段中,而且更高效。

(3)避免使用.htaccess文件有两个主要原因

首先是性能。如果AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。

还有,Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用,所以,如果请求/www/htdocs/example中的页面,Apache必须查找以下文件:

 

总共要访问4个额外的文件,即使这些文件都不存在。(注意,这可能仅仅由于允许根目录”/”使用.htaccess,虽然这种情况并不多。)

其次是安全。这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。但是,如果给予用户较少的特权而不能满足其需要,则会带来额外的技术支持请求,所以,必须明确地告诉用户已经给予他们的权限,说明AllowOverride设置的值,并引导他们参阅相应的说明,以免日后生出许多麻烦。

注意,在/www/htdocs/example目录下的.htaccess文件中放置指令,与在主配置文件中段中放置相同指令,是完全等效的。

总结

由上我们可以知道,使用.htaccess文件具有性能上的不利之处,所以我们应该尽可能避免使用.htaccess文件,下面介绍一种不使用.htaccess文件进行伪静态的方法:

Apache1.x的用户请检查conf/httpd.conf中是否存在如下两段代码: LoadModulerewrite_modulelibexec/mod_rewrite.so AddModulemod_rewrite.c Apache2.x的用户请检查conf/httpd.conf中是否存在如下一段代码: LoadModulerewrite_modulemodules/mod_rewrite.so

如果存在,且以#开头,请删除#。然后在配置文件(通常就是conf/httpd.conf或者conf/extra/httpd-vhosts.conf)中加入如下代码。此时请务必注意,如果网站使用通过虚拟主机来定义,请务必加到虚拟主机配置段中去,如果加在虚拟主机配置外部将可能无法使用。改好后然后将Apache重启。

①.在apache配置文件httpd.conf中找到:

LoadModulerewrite_modulemodules/mod_rewrite.so

这句,去掉前边的注释符号“#”,如果没有则添加这句。

②.在代码:

OptionsFollowSymLinks AllowOverrideNone

下面添加伪静态代码(以Wordpress伪静态为例):

RewriteEngineOn RewriteBase/ RewriteRule^index.php$-[L] RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteRule./index.php[L]

其中/usr/local/apache/htdocs/wwwtest即为要进行伪静态的网站的根目录

③.重启apache