服务器.htaccess文件的说明及简单应用

文章开始先说明一下,本文只是对.htaccess文件的一个简单认识及应用,够大家日常使用,如果大家想深入探讨的话,请参考其他资料。

.htaccess是什么

概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

使用规则

一般我们将.htaccess文件放置在网站的根目录,控制所在目录及所有子目录,而如果放置在子目录中,会受上级目录中.htaccess文件影响,是不起任何作用的。

疑难解答

如果在.htaccess文件中的某些指令不起作用,可能有多种原因。
最常见的原因是AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置 AllowOverride None 。有一个很好的测试方法,就是在.htaccess文件随便增加点无意义的垃圾内容,如果服务器没有返回了一个错误消息,那么几乎可以断定设置了 AllowOverride None 。
在访问文档时,如果收到服务器的出错消息,应该检查Apache的错误日志,可以知道.htaccess文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误。

下面是几个常用例子

1.自定义错误页面

ErrorDocument 404 /error-pages/not-found.html
ErrorDocument 503 /error-pages/service-unavailable.html

2.ip禁止

Order allow,deny
Deny from 123.45.67.8
Deny from 123.123.7
Allow from all

3.更改默认首页

DirectoryIndex homepage.html

4.页面跳转

Redirect page1.html page2.html

ThinkPHP 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php

去掉 URL 中的 index.php

ThinkPHP 作为 PHP 框架,是单一入口的,那么其原始的 URL 便不是那么友好。但 ThinkPHP 提供了各种机制来定制需要的 URL 格式,配合 Apache .htaccess 文件,更是可以定制出人性化的更利于 SEO 的 URL 地址来。

.htaccess文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。我们可以利用 .htaccess 文件的 Rewrite 规则来隐藏掉 ThinkPHP URL 中的 index.php 文件(即入口文件),这也是 ThinkPHP URL 伪静态的第一步。

例如原来的 URL 为:

1
http://phptest.com:81/shop/index.php/Admin/index/index

去掉 index.php 之后变为:

1
http://phptest.com:81/shop/Admin/index/index

如此一来,就变成了 http://服务器地址/应用模块名称/操作名称[/变量参数] 的常见 URL 格式

更改 Apache httpd.conf 配置文件

提示:如果在虚拟主机商配置,请直接配置第三、四步,因为支持 .htaccess 的空间已经配置好了前面两步。

用编辑器打开 Apache 配置文件 httpd.conf(该文件位于 Apache 安装目录Apache2conf),并按如下步骤修改,。

一、加载了 mod_rewrite.so

确认加载了 mod_rewrite.so 模块(将如下配置前的 # 号去掉):

1
LoadModule rewrite_module modules/mod_rewrite.so

QQ五笔截图未命名

二、更改 AllowOverride 配置

更改需要读取 .htaccess 文件的目录,将原来的目录注释掉:

1
#<Directory "C:/Program Files/Apache Group/Apache2/htdocs">

更改 AllowOverride None 为 AllowOverride FileInfo Options ,更改后的配置如下所示:

#<Directory "C:/Program Files/Apache Group/Apache2/htdocs">
<Directory E:/html/myapp>
    AllowOverride FileInfo Options
</Directory>

.htaccess 是基于目录来控制的, 该句即表示需要读取 .htaccess 文件的目录,要根据实际具体 Apache 的解析目录来配置。虚拟主机如果提供 .htaccess 控制,一般都已经配置好了。

三、添加 .htaccess 文件 Rewrite 规则

在需要隐藏 index.php 的目录下(本教程中为 E:/html/myapp,也即入口文件所在目录)创建 .htaccess 文件,并写入如下规则代码:

1
2
3
4
5
6
7
# BEGIN WordPress
RewriteEngine on
#不显示index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
# END WordPress

如果网站已经有 .htaccess 文件,在里面添加该段配置规则即可

四、更改项目配置文件

编辑项目配置文件 Conf/config.php ,将 URL 模式配置为 2(Rewrite模式):

1
  'URL_MODEL'=>2,

至此,各个配置已经完成。保存各配置文件后,重启 Apache 服务器并删除 Runtime 目录下的项目缓存文件,在浏览器访问隐藏 index.php 后的地址测试是否成功:

1
http://phptest.com:81/shop/Admin/index/index

如果访问成功,那么利用 Apache .htaccess 文件的 Rewrite 规则隐藏 index.php 入口文件的配置就成功了。见下图
QQ五笔截图未命名2

hosts域名映射成功,但apache访问失败常见原因

当你hosts域名映射成功后,也就是可以用ping成功后。

QQ五笔截图未命名

然后apache绑定网站后, 访问域名总是404

可能是你端口问题  默认apache80是不用加的,但是如果你现在用的不是80端口,必须在域名后面加端口号,才可以成功访问,也就用这个形式:域名/你自己设置的端口号