ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[学习]Apache 虚拟域名配置

2021-09-09 15:34:40  阅读:296  来源: 互联网

标签:index Deny REQUEST htaccess 域名 虚拟 Allow Apache RewriteCond


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

标签:index,Deny,REQUEST,htaccess,域名,虚拟,Allow,Apache,RewriteCond
来源: https://www.cnblogs.com/fogwind/p/15247232.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有