apache重写规则

前两天部署一个项目到本机环境,从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文件中的语法是一样的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 此文章转载~ Apache伪静态(Rewrite).htaccess文件详解 Htaccess(超文本访问)是一个...
    bornfreekiss阅读 9,651评论 0 6
  • 重写规则 【重写规则的作用范围】 可以使用在Apache主配置文件httpd.conf中 可以使用在httpd.c...
    桖辶殇阅读 5,758评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,183评论 19 139
  • 一场电影就像一次人生旅途,每一场电影,每一次邂逅。 这是我曾经整理过我看过评分较高的电影,每个人对于电影都有不...
    Alethea阅读 1,288评论 0 0
  • 今天打了几把排位,又黑了。 教练张掐指一算,发现事情并不简单。 还好及时发现问题之所在,特来传授给大家。 ↓ ↓ ...
    大贝吔屎啦阅读 1,450评论 4 1

友情链接更多精彩内容