Apache伪静态,Nginx重定向 与 相对路径(css js image等)

本文详细介绍了Apache .htaccess文件的伪静态设置,包括开启重写引擎、设置RewriteCond与RewriteRule以及解决相对路径问题。同时也探讨了Nginx的重定向配置,包括对域名的重定向、特定路径的重定向以及http代理的实现,强调了Nginx配置的简洁性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apache .htaccess 伪静态

在Apache配置完httpd.conf文件,

<Directory>
    AllowOverride None 改为 AllowOverride All
</Directory>

并开启 mod_rewrite.so模块

去掉改行注释:" LoadModule rewrite_module modules/mod_rewrite.so" 后,

即可在根目录下新建.htaccess文件使用伪静态进行重定向,在linux系统中,.htaccess默认是隐藏的,可以使用指令 "ls -a" 查看。

.htaccess 文件用正则表达式进行模式匹配

.匹配任何单个字符c.t将匹配 cat, cotcut,等。
+重复上一个匹配一次或多次a+ 匹配 aaa, aaa,等
*重复前一个匹配零次或多次。a* 匹配所有相同的 a+匹配项,但也匹配空字符串。
?使匹配可选。colou?r会匹配 colorcolour
^称为锚点,匹配字符串的开头^a 匹配一个以 a开头的字符串。
$另一个锚,这匹配字符串的结尾。a$匹配以一个以a结尾的字符串 。
( )将多个字符组合到一个单元中,并捕获匹配以用于反向引用。(ab)+ 匹配ababab 例如,(abc|bcd|cde),表示这一段是abc、bcd、cde三者之一,顺序也必须一致,+适用于组。
[ ]字符类 - 匹配其中一个字符c[uoa]t 匹配 cut, cotcat
[^ ]非字符类 - 匹配未指定的任何字符c[^/]t 匹配 cat 或 c=t 但不匹配c/t

常用组合:

RewriteEngine On #表示开启重写引擎
RewriteBase /   #表示以根目录为基准

#RewriteCond %{REQUEST_FILENAME} !-f #如果不是文件,则执行下面的规则

#RewriteCond %{REQUEST_FILENAME} !-d #如果不是文件,则执行下面的规则
#RewriteCond %{REQUEST_URI} !^/css #下面规则对中不包含 "/css" 的url地址生效
#RewriteCond %{REQUEST_URI} !^/js #下面规则对中不包含 "/css" 的url地址生效
#RewriteCond %{REQUEST_URI} !^/images #下面规则对不包含 "/css" 的url地址生效
#RewriteCond %{REQUEST_URI} !^.*(\.css|\.js|\.gif|\.png|\.jpg|\.jpeg|\.xml)

# 下面规则对不包含".css", ".js", ".gif",".png",".jpg",".jpeg",".xml"的url地址生效
# 解决重写后接不到问号后面的参数
RewriteCond %{QUERY_STRING} ^(.*)$
# 把URL中的index.php省略掉

# $1 表示第一个()中匹配到的内容,可以跳过index.php直接到后面的路径

# 比如 localhost/index.php/abc/csd ,直接输入 localhost/abc/csd 可以访问到相同的路径
RewriteRule  ^(.*)$ index.php?$1 [L,QSA]

常用后缀

L(last):立即停止重定向的进程,不再应用更多规则。

NC(nocase):不区分大小写。

F(forbidden):强制当前URL为被禁止的,即,立即反馈一个HTTP响应代码403(被禁止的)。

QSA(qsappend):将原始请求URL中的任何查询字符串追加到重写目标中创建的任何查询字符串、

QSD(qsdiscard):丢弃附加到传入URI的任何查询字符串。

相对路径问题

一个html文档被重定向了,其中引入的link和script都是使用 "./css/xxxx.css"相对路径的方式,在请求的url路径不在根目录下的时候会引入不到,比如根目录在 "www.xxxx.com/",重定向设置所有文档到 根目录下的 index.html 文件,这个时候我们访问

"www.xxxx.com/setwt/jukuk/qwrer",如果在根目录下的 index.html 中console.log(window.location.href);

会输出"http://localhost/setwt/jukuk/qwrer",这个时候再去用 "./css/xxxx.css"的方式引入css文件就变成了在"http://localhost/setwt/jukuk/css"路径下查找xxxx.css文件,自然是引入不到的。

使用伪静态的时候一定要用绝对路径引入文件,同时要用 "RewriteCond" 过滤掉所有资源文件,使其不被重定向。

Apache 官方参考文档:http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

Nginx 重定向

参考文章:https://www.cnblogs.com/cheyunhua/p/8128039.html

Nginx服务器可以配置rewrite(重写)和http_proxy(http代理),不同于Apache服务器的 RewriteCond 和 RewriteRule,个人认为Nginx的配置更加简单。

1. 对某个域名进行重定向,例如把example.org重定向到www.example.org

server{
    listen 80;
    server_name example.org;
    return 301 http://www.example.org$request_uri;
}

$request_uri 指的是跟在域名后面的部分。

2. 把在域名下 example.com 和所有三级域名不是 www (www.example.com) 域名重定向到 www.example.com

server{
    listen 80;
    server_name example.com www.example.com;
    ...
}

server{
    listen 80 default_server;
    server_name _;
    return 301 http://example.com$request_uri;
}

3. 将路径中包含baidu的url重定向到 https://www.baidu.com 

rewrite时的匹配规则也是正则,可以直接在 location 的位置匹配,也可以在 location 底下通过rewrite匹配。

location ~^/(.*)baidu {
    return 301 https://www.baidu.com$request_uri;
}

通过location把REQUEST_URI中带有/baidu的url重定向到域名 https://www.baidu.com后接所有请求路径。

location / {
    rewrite ^(.*)baidu https://www.baidu.com/$request_uri;
}

直接用rewrite规则匹配,在根目录进行匹配。

4. http代理,做域名转发

location / {
    proxy_pass https://www.baidu.com
}

url中的地址不变但是REQUEST_URI和所有参数都会转发到百度的域名地下,返回结果与输入到百度域名底下的返回结果一致,可用来结决跨域处理问题。。

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${
    ...
}

这个可以匹配一定格式的图片文件,可以重定向或者代理到静态资源文件仓库地址(仓库文件所在REQUEST_URI要与请求地址的REQUEST_URI保持一致)。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值