美文网首页
apache重写规则

apache重写规则

作者: 牵小马过河 | 来源:发表于2017-07-25 15:38 被阅读0次

    前两天部署一个项目到本机环境,从nginx转到apache,因为不熟悉apache的重写规则,给自己挖了很多坑。。看了很多博客后,终于解决了问题,总结如下。

    什么是url重写?

    url重写可以把冗长的url地址按我们自定义的规则来简化。比如一个类似 www.test.com?user_id=123&user_ps=abc 的域名,通过url重写,我们直接以 www.test.com/123/abc 的方式来访问。这样是不是简洁多了?这样既可以增强seo,同时也可以处理形如访问url不存在的问题。

    启动url重写的步骤如下

    1、打开apache/conf目录下的httpd.conf,找到

    #LoadModule rewrite_module modules/mod_rewrite.so

    将最前面的#去掉

    2、找到

    <Directory /> 

     AllowOverride NONE   

     Require all granted

    </Directory>

    改成

    <Directory />

    AllowOverride ALL  

    Require all granted

    </Directory>

    3、在项目根目录下创建 .htaccess 文件,在该文件中输入(windows下无法直接创建。htaccess文件,可先新建记事本,再另存为)

    <IfModulemod_rewrite.c>

    Options Indexes FollowSymlinks

    RewriteEngine On                                                        #启动重写引擎

    RewriteCond %{REQUEST_FILENAME} !-d               #判断请求文件是否为目录

    RewriteCond %{REQUEST_FILENAME} !-f               #判断请求文件是否为文件

    RewriteRule ^(.*)$ index.php/$1                              #重写规则,用正则表达式

    </IfModule>

    以上即为启用url重写的步骤,接下来具体介绍一下.htaccess文件中各字段的意义和属性。

    Options Indexes FollowSymLinks就表示:我访问www.test.com,如果文件根目录里有 index.html(index.php),浏览器就会显示 index.html的内容,如果没有 index.html,浏览器就会显示这文件根目录的目录列表,目录列表包括文件根目录下的文件和子目录。

    考虑到安全问题,不想让别人访问到目录文件,应该怎么办呢?只需要将Indexes字段删掉即可。再次访问该域名,如果不存在index.html或者index.php文件,则会报403错误。

    RewriteEngin On表示启用重写引擎,将On改为Off即可关闭重写引擎,方便我们启动或关闭重写引擎,而无需修改大量代码。

    RewriteCond表示重写条件,类似于if条件语句,一般形式为    RewriteCond %{XXXXXXX} + 正则匹配条件    ,可以多条RewriteCond对应一条RewriteRule

    RewriteRule 表示重写规则,一般形式为  RewriteRule 正则匹配条件  XXXXXX ,上文的

    RewriteRule ^(.*)$ index.php/$1

    表示将任意请求改成index.php/$1,其中$1表示正则表达式中第一个()中的值。

    对于AllowOverride All,表示允许.htaccess覆写httpd.conf中的设置,如果想禁止.htaccess起作用 ,将All改成none就可以了

    在这里对.htaccess的利弊做一些补充

    当我们是与其他人共享服务器的情况下,我们可能无法直接修改服务器的配置,通过.htaccess可方便我们对服务器进行修改,且不会干预到他人。但这样做会导致性能降低,理由如下:

    一个.htaccess文件是对当前目录及其子目录起作用的,也就是说当我们访问一个文件时,服务器不仅要从检查当前目录下的.htaccess文件,还要检查其父目录的,很有可能还要检查其祖父级目录的,无论这些目录中.htaccess文件是否存在,这样就可能有很多次的访问是没有必要的,影响了性能。

    所以如果可以,尽可能直接修改httpd.conf文件,具体的语法与.htaccess文件中的语法是一样的。

    相关文章

      网友评论

          本文标题:apache重写规则

          本文链接:https://www.haomeiwen.com/subject/zvvwkxtx.html