零零散散:
1.设置所有到test目录都允许访问
这里不能写成<Directory ~ "/test$"> 或者 <Directory ~ "/test[\s\S]*$">,否则找不到匹配到文件夹导致权限不起作用,不知道为什么,所有以正则匹配到<Directory>如果正则以$结尾,就找不到匹配
2.<Directory> 的正则匹配和通配符匹配里设置url重写指令无效,还会破坏本来已经实现的url重写,例如:
或者
发现无法对/usr/dev/apache3w/test目录下的文件进行url重写,如果需要使用url重写,则必须要使用完整路径,如
且在<Directory> 的正则匹配和通配符匹配里设置url重写不仅无效,还会覆盖已经有效的url重写,例如:
(1)Directory通配符匹配中设置url重写,如果其顺序在有效的url重写设置以后
</Directory>
(2) Directory正则匹配中设置url重写(注意,Directory的正则匹配也可以不加引号)
3.Files指令
Files指令提供了基于文件名的访问控制,优先级在<Directory>
段和.htaccess
文件被处理之后,但在<Location>
段之前
例如
<Files ~ \.php$>
</Files>
表示所有的php文件被拒绝访问
表示只有/usr/dev/apache3w/test2/test/index.php被拒绝访问,但是同目录下到其他php文件却可以被访问
Listen 81
<VirtualHost *:80>
ServerAdmin lx@qq.com
DocumentRoot "D:/Apache3W"
ErrorLog logs/81-error_log.log
TransferLog logs/81-access_log.log
</VirtualHost>
<VirtualHost *:81>
ServerAdmin lx@qq.com
DocumentRoot "D:/Apache3W_81"
ErrorLog logs/81-error_log.log
TransferLog logs/81-access_log.log
</VirtualHost>
(2)同一端口多个网站
Listen 80
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin lx@qq.com
ServerName a.lexun.com
DocumentRoot "D:/Apache3W"
ErrorLog logs/a.test.com-error_log.log
TransferLog logs/a.test.com-access_log.log
</VirtualHost>
<VirtualHost *:80>
ServerAdmin lx@qq.com
ServerName b.lexun.com
DocumentRoot "D:/Apache3W_81"
ErrorLog logs/b.test.com-error_log.log
TransferLog logs/b.test.com-access_log.log
</VirtualHost>
5.关于AddHandler和AddType(一个是指定服务器用什么处理器处理请求的资源,一个是指定客户端浏览器的mime类型)
假设AddHandler和AddType都是设置在server config ,且没有被子级所覆盖
AddHandler application/x-httpd-php .php
AddType image/jpg .php
结果:
AddHandler 的值优先级较高,所以访问 localhost/index.php 会正常解析php
(2)
AddHandler image/jpg .php
结果:
Response的Header有如下标头:Content-Type:text/plain
由于服务器找不到.php的处理器,所以会将php文件当做原始txt脚本输出
(3)
AddType image/jpg .php
结果:
Response的Header有如下标头:Content-Type:image/jpg
服务器会将php当做原始txt文本输出,但是由于.php不是jpg图片类型,而用Firefox浏览localhost/index.php,则会有如下提示:图像
“http://localhost/index.php” 因其本身有错无法显示。
(4)
AddHandler image/jpg .php
AddType image/jpg .php
结果:
Response的Header有如下标头:Content-Type:image/jpg
和(3)一样,这是因为AddHandler虽然优先级高一点,但是由于找不到image/jpg的处理器而使用文本处理器,所以会被后面的AddType image/jpg .php覆盖掉
提示:以上结果每次更改httpd.conf重启服务器后,最好浏览器清空缓存,关闭标签,再打开页面浏览。
分别以module、FastCgi、Cgi三种方式运行PHP的配置(测试环境:Win7+Apache2.2+PHP5.3.5)
#LoadModule php5_module "D:\dev\php_5.3.5\php5apache2_2.dll"
#AddHandler application/x-httpd-php .php
#PHPIniDir "D:\dev\php_5.3.5"
#use fastcgi
#LoadModule fcgid_module modules/mod_fcgid.so
#FcgidInitialEnv PHPRC "D:\dev\php_5.3.5"
#AddHandler fcgid-script .php
#FcgidWrapper "D:\dev\php_5.3.5\php-cgi.exe" .php
#use cgi 注意:此处要使用 / 而不是 \ 否则会出现如下错误(假设访问 http://localhost/index.php): The requested URL /php/php-cgi.exe/index.php was not found on this server
ScriptAlias /php/ "D:/dev/php_5.3.5/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php-cgi.exe"
使用cgi模式配合ScriptAlias的例子
1.在httpd.conf按上述方式配置为cgi模式
2.在 D:/dev/php_5.3.5/ 建立test.php,内容如下:
<?php
echo 'hello world';
?>
3.更改php.ini: cgi.force_redirect = 0
4.重启Apache
然后访问http://localhost/php/test.php,页面正常执行。如果去掉#!D:/dev/php_5.3.5/php-cgi.exe 这个声明或者php.ini中的cgi.force_redirect 不等于0,页面会报错。