Apache url 重写

重写配置

1、打开 apache 里httpd.conf(通常是在/etc/httpd/conf目录里)

2、找到   #LoadModule rewrite_module modules/mod_rewrite.so  去掉前面的  #

    如果在 httpd 中查看是否调用  rewrite_module  通过   httpd -M   的参数来查看; 如果发现有  rewrite_module (shared)  ,说明已经被调用了。

 于大多数发行版来说,Apache 2的模块一般是位于如下的两个位置  /usr/lib/apache2/modules  或   /usr/lib/httpd/modules 

 

3、找到 AllowOverride None 改成 AllowOverride All , 有两个全部改掉
     AllowOverride 的参数设置为ALL,表示整台服务器上都支持URL规则重写。Apache 服务器要读每个网站下目录下的 .htaccess 文件。如果没有这个文件,或者这个文档没有定义任何关于URL重写的规则就不会有任何效果。设置   DocumentRoot  的   Directory (整台服务器): 

<Directory "DocumentRoot所设置的路径">
# 比如我们把DocumentRoot的路径改为了 /,那我们也要把Directory做针对性的行为设置也要改成这个路径。
<Directory />
Options FollowSymLinks
#AllowOverride None 
AllowOverride ALL
Order allow,deny
Allow from all
</Directory>

4、设置单个站点 ,httpd-vhosts.conf / vhosts.conf  文件

<VirtualHost *:80>
DocumentRoot "F:\phpStud\PHPTutorial\WWW\tp\public"
ServerName tp.com
ServerAlias gohosts.com
<Directory "F:\phpStud\PHPTutorial\WWW\tp\public">
Options FollowSymLinks ExecCGI
AllowOverride All   # 如果此站点不开启url 重写 AllowOverride  Noll,默认与全局设置一致
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>

 

5、重启apache

 

重写规则

网站根目录下创建  .htaccess  文件

1) R[=code](force redirect)  #强制外部重定向
强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。
2) F(force URL to be forbidden)  #禁用URL,返回403HTTP状态码。
3) G(force URL to be gone)  # 强制URL为GONE,返回410HTTP状态码。
4) P(force proxy) # 强制使用代理转发。
5) L(last rule) # 表明当前规则是最后一条规则,停止分析以后规则的重写。
6) N(next round) # 重新从第一条规则开始运行重写过程。
7) C(chained with next rule) # 与下一条规则关联
如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。
8) T=MIME-type(force MIME type) # 强制MIME类型
9) NS (used only if no internal sub-request) # 只用于不是内部子请求
10) NC(no case) # 不区分大小写
11) QSA(query string append) # 追加请求字符串
12) NE(no URI escaping of output) # 不在输出转义特殊字符
例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] # 将能正确的将/foo/zoo转换成/bar?arg=P1=zoo
13) PT(pass through to next handler) # 传递给下一个处理
例如:
RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理
Alias /def /ghi
14) S=num(skip next rule(s)) # 跳过num条规则
15) E=VAR:VAL(set environment variable) # 设置环境变量

 

HTTP 跳转至 HTTPS 示例

RewriteEngine on  # 开启重写
RewriteCond %{SERVER_PORT} !^443$  # 如果访问的不是 443 端口
RewriteCond %{REQUEST_URI} !^/tz.php  #如果访问的url 不是 /tz.php
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]     # 跳转到  https://域名+$1

 

HTTP 80 强制转 HTTPS

RewriteEngine On
RewriteCond %{SERVER_PORT} 80  # 如果访问的是80 端口
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]  # 跳转 https 

 

强制301重定向 HTTPS

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /  # 表示项目根目录
RewriteCond %{SERVER_PORT} !^443$  # 如果访问的不是443 端口
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R=301,L]  # 重定向到 301
</IfModule>

 

访问不是一个文件也不是一个目录跳转指定页面

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f # 如果请求的不是文件
RewriteCond %{REQUEST_FILENAME} !-d # 如果请求的不是目录
RewriteRule ^(.*)$ http://other.kevin.com/$1 [R]  #跳转到指定页面

 

图片防盗链

RewriteCond   %{HTTP_REFERER}   !^$ # 如果上个页面地址为空
RewriteCond    %{HTTP_REFERER}   !^http://(www\.)?example\.com/   [NC]    #或者不是来自你自己的域名
RewriteRule   \.(gif|jpg|png)$   - [F]  #禁止访问

 

如果文件不存在重定向到404页面

RewriteCond   %{REQUEST_FILENAME}   !-f  # 如果访问的不是一个文件
RewriteCond   %{REQUEST_FILENAME}   !-d  #如果访问的不是一个目录
RewriteRule   .?   /404.php   [L]   #跳转到网站根目录
# 也可携带参数
#RewriteRule ^/?(.*)$ /404.php?url=$1 [L]

 

重命名目录

RewriteRule   ^/?old_directory/([a-z\.]+)$   new_directory/$1   [R=301,L]

相关文章  :https://www.cnblogs.com/kynewu/p/9088550.html

https://cloud.tencent.com/developer/article/1348412

 

apache 服务器 忽略大小写

1、查看系统有无mod_speling.so模块,路径:/etc/httpd/modules,如果没有就从别处下载一个;

2、加载此模块   vi /etc/httpd/conf/httpd.conf ,添加如下行,如果已经存在取消 ; 注释:  

 LoadModule speling_module modules/mod_speling.so
<IfModule mod_speling.c>
  CheckSpelling On
  CheckCaseOnly On
</IfModule>

3、重启httpd服务。

 

nginx  url 重写与 apache url 重写的转换

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章