zoukankan      html  css  js  c++  java
  • 关于httpd.conf的一点随笔

    假设httpd.conf里的 DocumentRoot 为  DocumentRoot "D:/Apache3W"
    使用<Directory>指令设置url重写,在httpd.conf写如下内容
    <Directory "D:/Apache3W">
    RewriteEngine on
        RewriteRule ^([^\.]+)$ $1.php
    Options Indexes FollowSymLinks  
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    <Directory "D:/Apache3W/phplearn">
    #如果这里什么都不写,也会应用url重写设置,因为D:/Apache3W/phplearn是D:/Apache3W的子目录,所以此目录指令的设置会继承它父目录的指令设置,如果此目录不想重写url,必须在这里
    显式指定:RewriteEngine off
    #如果在这里写 RewriteEngine on 但是指定 RewriteRule  ,则此目录也不能实现url重写,因为RewriteEngine on覆盖了父目录的url重写设置,导致父目录的RewriteRule失效
    </Directory>
    使用.htaccess文件设置url重写,httpd.conf中指定如下内容:
    <Directory "D:/Apache3W">
    Options Indexes FollowSymLinks  
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    <Directory "D:/Apache3W/phplearn">
    </Directory>
    在D:/Apache3W建立.htaccess文件,内容如下:
    RewriteEngine on
    RewriteRule ^([^\.]+)$ $1.php
    则D:/Apache3W和D:/Apache3W/phplearn都实现了url重写
    在D:/Apache3W/phplearn建立.htaccess文件,内容如下:
    RewriteEngine off
    则只有D:/Apache3W实现了url重写
    改变D:/Apache3W/phplearn的</Directory>指令如下:
    <Directory "D:/Apache3W/phplearn">
    AllowOverride None
    </Directory>
    发现D:/Apache3W/phplearn又实现了url重写,这是因为D:/Apache3W/phplearn禁用了.htaccess文件,则D:/Apache3W/phplearn会继承其上一层目录的.htaccess文件

    零零散散:
    1.设置所有到test目录都允许访问
    <Directory ~ "/test/">   
        Order deny,allow
        Allow from all   
    </Directory>

    这里不能写成<Directory ~ "/test$">  或者 <Directory ~ "/test[\s\S]*$">,否则找不到匹配到文件夹导致权限不起作用,不知道为什么,所有以正则匹配到<Directory>如果正则以$结尾,就找不到匹配

    2.<Directory> 的正则匹配和通配符匹配里设置url重写指令无效,还会破坏本来已经实现的url重写,例如:

    <Directory /usr/dev/apache3w/*>     
        RewriteEngine On
        RewriteRule   ^(\w+)\.?(?:\w+)?$ $1.php
    </Directory>
    或者 
    <Directory ~ "/test/">    
        RewriteEngine On
        RewriteRule   ^(\w+)\.?(?:\w+)?$ $1.php
    </Directory>

    发现无法对/usr/dev/apache3w/test目录下的文件进行url重写,如果需要使用url重写,则必须要使用完整路径,如

    <Directory /usr/dev/apache3w/test> 
        RewriteEngine On
        RewriteRule   ^(\w+)\.?(?:\w+)?$ $1.php
    </Directory>
    且在<Directory> 的正则匹配和通配符匹配里设置url重写不仅无效,还会覆盖已经有效的url重写,例如:

    (1)Directory通配符匹配中设置url重写,如果其顺序在有效的url重写设置以后   

    <Directory /usr/dev/apache3w/test> 
        RewriteEngine On
        RewriteRule   ^(\w+)\.?(?:\w+)?$ $1.php
    </Directory>
    <Directory /usr/dev/apache3w/*> 
        RewriteEngine On
        RewriteRule   ^(\w+)\.?(?:\w+)?$ $1.php
    </Directory> 

    (2) Directory正则匹配中设置url重写(注意,Directory的正则匹配也可以不加引号)

    <Directory ~ /test/> 
        RewriteEngine On
        RewriteRule   ^(\w+)\.?(?:\w+)?$ $1.php
    </Directory>
    <Directory /usr/dev/apache3w/test> 
        RewriteEngine On
        RewriteRule   ^(\w+)\.?(?:\w+)?$ $1.php
    </Directory>


    3.Files指令
    Files指令提供了基于文件名的访问控制,优先级在<Directory>段和.htaccess文件被处理之后,但在<Location>段之前
    例如
    <Files ~ \.php$>

            Deny from all
    </Files>

    表示所有的php文件被拒绝访问

    <Directory "/usr/dev/apache3w/test2/test">   
        <Files index.php>
            Deny from all
        </Files>
    </Directory> 

    表示只有/usr/dev/apache3w/test2/test/index.php被拒绝访问,但是同目录下到其他php文件却可以被访问

    4.配置多个网站
    (1)不同端口多个网站
    Listen 80
    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 ,且没有被子级所覆盖
    (1)
    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)


    #use apache module  

    #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,内容如下:

    #!D:/dev/php_5.3.5/php-cgi.exe 
    <?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,页面会报错。
     

  • 相关阅读:
    【转】CUDA5/CentOS6.4
    【转】centos 6.4 samba 安装配置
    【转】Install MATLAB 2013a on CentOS 6.4 x64 with mode silent
    【转】Getting xrdp to work on CentOS 6.4
    【VLFeat】使用matlab版本计算HOG
    Unofficial Windows Binaries for Python Extension Packages
    March 06th, 2018 Week 10th Tuesday
    March 05th, 2018 Week 10th Monday
    March 04th, 2018 Week 10th Sunday
    March 03rd, 2018 Week 9th Saturday
  • 原文地址:https://www.cnblogs.com/mxw09/p/2154240.html
Copyright © 2011-2022 走看看