zoukankan      html  css  js  c++  java
  • [学习]Apache 虚拟域名配置

    Apache 虚拟域名配置

    下面代码中#表示注释:

    # 新版本的Apache已经不需要写NameVirtualHost *:80了
    NameVirtualHost *:80
    # 虚拟域名配置块, *:80  表示接受任何ip的80端口访问
    <VirtualHost *:80>     
        # 项目根目录                           
        DocumentRoot "D:/wamp/www/testphp/"
    
        # 虚拟域名           
        ServerName php.iyangyi.com  
    
        # 虚拟域名的别名  如果想把另外一个域名也指向这个项目目录,可以使用该配置项                  
        ServerAlias www.pptv.cn   
    
        # 可选  服务器管理员的邮箱,当服务器出现故障时会向这个邮箱发邮件或者显示在页面上
        ServerAdmin stefan321@qq.com   
    
        # 可选  错误日志显示路径,当访问出现错误的时候,就会记录到这里,注意:logs/dev-error.log 这个文件路径是apache的安装目录下的logs 目录 。
        ErrorLog logs/dev-error.log  
    
        # 可选 访问日志,用来记录每一次的请求访问。注意:logs/dev-access.log 这个文件路径是apache的安装目录下的logs 目录 。记住:路径后面加common
        CustomLog logs/dev-access.log common  
    
        # 可选 配置403,404等错误信息调整页面,用来访问出现404页面等情况时的错误页面展示。
        # 注意:/404.html 这个文件路径是项目的根目录,不是apache的目录 。
        ErrorDocument 404 logs/404.html 
    
        # <Directory> 后面跟的是项目根目录。标签下配置项目的rewrite规则
        <Directory "D:/wamp/www/testphp/">
            #  是否来显示文件根目录的目录列表
            #  Options Indexes FollowSymLinks 配置项表示如果项目根目录下有index.html或index.php文件,会显示index文件,如果没有显示项目目录
            #  如果既有index.html又有index.php,会根据以下配置项显示,排在前的先显示:
            #  <IfModule dir_module>
            #      DirectoryIndex index.html index.htm index.php index.php3
            #  </IfModule>
            #  如果不想显示项目目录可以配置成 Options FollowSymLinks 或者 Options -Indexes FollowSymLinks
            Options Indexes FollowSymLinks
            
            # 使项目目录下的.htaccess文件起作用。如果配置成AllowOverride None会禁止项目目录下的.htaccess
            AllowOverride All
    
            # 配置访问权限检查顺序,一般与Allow from 配置项配合使用。
            # Deny与Allow用逗号分隔,不能有空格。
            # Order Deny,Allow :表示设定“先检查禁止设定,再检查允许设定”
            # Order Allow,Deny : 表示设定“先检查允许设定,再检查禁止设定”
            # Allow和Deny,谁在最后则最后应用谁的规则
            Order Allow,Deny
    
            # Deny from All 、Deny from 127.0.0.1 禁止访问的ip, all 表示全部
            # Allow from All、 Allow from 127.0.0.1 允许访问的ip, all 表示全部
            Allow from all
    
            # 以下是rewrite规则配置
            RewriteEngine on
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
        </Directory>
    </VirtualHost>
    

    Order Allow,Deny

    Order Allow,Deny举例:

    Order Allow,Deny
    Allow from all
    Deny from 192.168.16.233
    

    先检查Allow配置项,再检查Deny配置项,由于Deny在最后,所以虽然Allow配置了允许所有ip,但最后会禁止192.168.16.233 ip访问。

    注意,上面例子中调换第二句和第三句的位置不会影响最终的规则,因为最终的规则是根据Order后的顺序决定的。

    这篇文章讲的很详细

    rewrite规则

    重写规则属于Apache的mod_rewrite 模块,详细内容可以看官方文档

    RewriteEngine on开启URL重写功能。

    RewriteCond语句声明重写的条件,RewriteRule语句声明具体的重写规则。

    RewriteCond语句的语法:

    RewriteCond TestString CondPattern [Flags]
    

    TestString是一个字符串,可以是一个纯文本,也可以是支持的扩展结构,具体可以看官方文档

    CondPattern是条件模式,是一个应用于TestString的正则表达式。

    Flags是应用于CondPattern的特殊标记,可以取以下值:

    1. nocase或NC 表示忽略大小写。
    2. ornext或OR 表示多条RewriteCond语句之间是逻辑或的关系。默认情况下,多条RewriteCond语句之间是逻辑与关系。
    3. novary或NV 如果一个HTTP头应用了此条重写条件,该标识会阻止这个HTTP头被添加到响应头的Vary字段下。

    比如:

    RewriteCond %{REQUEST_URI} !^/blog/ [NC]
    

    %{REQUEST_URI}表示获取请求头REQUEST_URI值,!^/blog/表示不是/blog/开头,NC表示忽略大小写。
    整句话的意思是:如果REQUEST_URI的值不是/blog/开头。

    再比如:

    RewriteCond %{REQUEST_FILENAME} !-f
    

    -f表示文件。上面代码的意思是:如果REQUEST_FILENAME的值不是服务器上存在的文件。

    RewriteRule语句的语法:

    RewriteRule RegExp RewriteString [Flags]
    

    RegExp是一个兼容Perl的正则表达式。RewriteString是重写的规则。
    比如:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?page=$1 [L]
    

    L标记表示对于符合RewriteCond条件的请求,该条规则是最终的重写规则,不再匹配之后的重写规则。

    上面的重写规则的意思是:如果当前请求的REQUEST_FILENAME不是服务器上存在的文件,那么REQUEST_FILENAME的值会与RewriteRule里的正则表达式匹配,对于符合匹配的部分替换为index.php?page=$1,并把匹配到的捕获组作为查询参数page的值,$1表示匹配结果中的第一个捕获组。

    比如,你访问的链接是https://www.example.com/test/tt.html,而服务器上根本不存在这个目录和文件,那么服务器会重写该请求为https://www.example.com/index.php?page=test/tt.html,所以你实际上访问的是index.php文件。

    RewriteRule标记的文档

    实际上重写规则还与RewriteBase有关,这里默认不指定RewriteBase

    .htaccess文件

    .htaccess文件也可以叫做分布式配置文件,提供了一种给每一个目录添加不同配置项的方式。

    官方推荐:如果有访问httpd文件的权限,尽量不要使用.htaccess文件。因为使用.htaccess文件会降低Apache服务器的性能,所有在.htaccess文件中添加的配置指令都可以在Directory标签下配置,效果一样而性能更好。

    关于.htaccess的详细信息可以看官方文档

    参考文章

    1. 25 个有用 Apache ‘.htaccess’ 技巧
    2. Apache的Rewrite详解
    3. apache的虚拟域名rewrite配置以及.htaccess的使用
    4. Apache的Order Allow,Deny 详解
    5. .htaccess 详解
    6. Apache Module mod_rewrite
  • 相关阅读:
    kafka 学习资料
    kafka 的 docker 镜像使用
    SpringBoot 使用 Mybatis 注解进行一对多和多对多查询(不推荐使用注解方式)
    MYSQL 中的 int(11) 到底代表什么意思?
    MyBatis 学习资料
    什么是 CAP 理论?
    一致性哈希算法原理
    SELECT 语句语法
    MySQL中如何实现 select top n
    基于 debian:stretch-slim 系统镜像的 docker 镜像,安装 curl
  • 原文地址:https://www.cnblogs.com/fogwind/p/15247232.html
Copyright © 2011-2022 走看看