未备案的网站 访问 hots,中国诚乡建设部网站,wordpress屏蔽字体,洪山网站建设公司一、开启重写模块
apache 的配置文件 httpd.conf 开启 LoadModule rewrite_module modules/mod_rewrite.so
二、配置重写规则
1. apache 主配置文件 httpd.conf #xff08;服务器级别#xff0c;需要拥有服务器的管理权限#xff09;
2. 使用在httpd.conf里定义的虚…一、开启重写模块
apache 的配置文件 httpd.conf 开启 LoadModule rewrite_module modules/mod_rewrite.so
二、配置重写规则
1. apache 主配置文件 httpd.conf 服务器级别需要拥有服务器的管理权限
2. 使用在httpd.conf里定义的虚拟主机配置中
3. 目录下 .htaccess 文件中目录级http://www.haolizi.net/别作用于当前目录项目
如果是使用 .htaccess 需要在主配置文件中对网站所在目录定义以下内容
Directory /var/www/Options Indexes FollowSymLinksAllowOverride All Require all granted
/Directory
//一般情况下是 AllowOverride None 改成 All 后即表示整台服务器上都支持URL规则重写apache服务器要读取每个项目目录下的 .htaccess 文件 如果没有这个文件或者没有定义任何关于url的规则就不会有效果
修改为 all 后需要重启 apache #sudo /etc/init.d/apache2 restart
重启后或许会报505错误解决方法 #sudo a2enmod rewrite #sudo service apache2 restart
虚拟主机配置示例
VirtualHost *:80 #网站目录如果在www目录下的php目录下面 #就填写F:/www/php DocumentRoot D:/phpstudy/www #域名 ServerName www.baidu.com #这里配置默认首页 DirectoryIndex index.html index.htm index.php Directory / Options FollowSymLinks #不允许别人修改我们的页面为all 时 .htaccess 文件才生效 AllowOverride None #设置访问权限 order allow,deny Allow from all /Directory /VirtualHost
/usr/local/apache/conf/httpd.conf 配置 options Indexes followsymlinks #翻译后为 选项索引跟随链接 allowoverride all #允许重写 rewriteengine on #重写引擎 rewritebase / rewriterule ^(.*)$ index.html [R301] rewritebase / 的作用是如果在下面的rewriterule定义中被重写后的部分 (此处为文件名index.html) 前面没有 /则是相对目录相对于这个rewritebase后面的定义也就是 /usr/local/apache/htdocs/index.html ,否则如果此处没有 rewritebase / 这一项则被重写成http://127.0.0.1/usr/local/apache/htdocs/manual/index.html 显然是不正确的。 通常不用写 rewritebase / 这一项而直接在rewriterule ^(.*)$ /index.html [R301] 写 / 就可以或者是 rewriterule ^(.*)$ http://127.0.0.1/index.html [R301]
还有一些选项
RewriteCond %{HTTP_HOST} !^www.baidu.com [NC] #声明客户端请求的主机中前缀不是www.baidu.com其中 [NC] 的意思是忽略大小写 RewriteCond %{HTTP_HOST} !^127.0.0.1 [NC] #声明客户端请求的主机中前缀不是127.0.0.1其中 [NC] 的意思是忽略大小写 RewriteCond %{HTTP_HOST} !^$ #声明客户端请求的主机中前缀不为空
RewriteRule ^(.*) http://www.pdanda.com/ [L] #含义是如果客户端请求的主机中的前缀符合上述条件则直接进行跳转到http://www.pdanda.com/,[L]意味着立即停止重写操作并不再应用其他重写规则。这里的 .* 是指匹配所有URL中不包含换行字符()括号的功能是把所有的字符做一个标记以便于后面的应用.就是引用前面里的 (.*)字符。
RewriteCond %{HTTP_HOST} ^wx.baidu.con [NC] RewriteRule ^(.*) http://www.baidu.com/ [L]
上边两行的意思是将访问的网络地址是wx.baidu.com 的时候跳转到 http://www.baidu.com .htaccess 文件
RewriteEngine On #重写引擎 On 打开如果为 off 则重写不起作用不用再去注释掉下方的重写规则 RewriteMap lowercase int:tolower RewriteCond ${lowercase:%{SERVER_NAME}} ^[a-z0-9].eact.com.cn$ #重写条件 RewriteRule ^(.) ${lowercase:%{SERVER_NAME}}$1 [C] #重写规则
使用 .htaccess 前需要把 httpd.conf 中的 AllowOverride 设为 all
Apache Rewrite规则的书写
#当访问任何以t_开头以.html结尾的文件时将$1用与(.*)匹配的字符替换后访问相应的test.php页面 RewriteRule ^/t_(.*).html$ /test.php?id$1
#当我们访问的地址不是以www.163.com开头的那么执行下一条规则
RewriteCond %{HTTP_HOST} !^www.163.com [NC]
RewriteRule ^/(.*) http://www.163.com/ [L]
Apache Rewrite规则修正符 1) R 强制外部重定向 2) F 禁用URL,返回403HTTP状态码。 3) G 强制URL为GONE返回410HTTP状态码。 4) P 强制使用代理转发。 5) L 表明当前规则是最后一条规则停止分析以后规则的重写。 6) N 重新从第一条规则开始运行重写过程。 7) C 与下一条规则关联
如果规则匹配则正常处理以下修正符无效 8) TMIME-type(force MIME type) 强制MIME类型 9) NS 只用于不是内部子请求 10) NC 不区分大小写 11) QSA 追加请求字符串 12) NE 不在输出转义特殊字符 \%3d$1 等价于 $1
重写中设计到的特殊字符的含义【与正则表达式有些相似】
* 代表前面0或更多个字符 代表前面1或更多个字符 代表前面0或1个字符
^ 代表字符串的开始位置
$ 代表字符串结束的位置
。为通配符代表任何字符
\将跟在其后的字符还原为字符本身例如“\”代表的就是“”而非其它意思。
^在方括号里表示非的意思。例如^.代表非通配符。
文件不存在时的重定向
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? /404.php [L]
这里 -f 匹配的是存在的文件名-d 匹配的存在的路径名。这段代码在进行404重定向之前会判断你的文件名以及路径名是否存在也就是在文件名和目录不存在的时候跳转404。你还可以在404页面上加一个?url$1参数
RewriteRule ^/?(.*)$ /404.php?url$1 [L]
伪静态
RewriteEngine on
RewriteRule ^test([0-9]*).html$ /index.php?id$1
将.html后缀名转换成.php
RewriteRule ^/?([a-z/])\.html$ $1.php [L]