如何通过URL重写移除特定词并转发至原URL
嘿,这个需求很常见,用URL重写+反向代理就能轻松搞定!我给你准备了Nginx和Apache两种主流服务器的配置方案,你可以根据自己的环境来选:
Nginx 配置方案
首先确认你的Nginx已经启用了rewrite模块(默认是启用状态),然后在对应域名的server块里添加以下规则:
server { listen 80; server_name www.example.com; # 精准匹配/un、/cn这类路径,转发到带/web的实际地址 location ~ ^/(un|cn)$ { rewrite ^/(.*)$ /web/$1 last; } # 如果后续还有更多类似路径,用这条通用规则更省心(自动匹配所有非/web开头的路径) # location ~ ^/(?!web/)(.*)$ { # rewrite ^/(.*)$ /web/$1 last; # } # 处理实际请求的核心配置 location /web/ { # 如果是静态文件,直接指向文件目录 # root /path/to/your/project/files; # 如果是反向代理到后端服务 # proxy_pass http://your-backend-service-ip:port; # proxy_set_header Host $host; # proxy_set_header X-Real-IP $remote_addr; } }
配置完记得重启Nginx生效:sudo systemctl restart nginx
Apache 配置方案
先确保Apache启用了mod_rewrite模块(可以用sudo a2enmod rewrite开启),然后在站点的.htaccess文件或者虚拟主机配置里添加规则:
RewriteEngine On RewriteBase / # 精准匹配/un、/cn,转发到实际路径 RewriteRule ^(un|cn)$ /web/$1 [L,P] # 通用版本:自动匹配所有非/web开头的路径 # RewriteRule ^(?!web/)(.*)$ /web/$1 [L,P]
[L]表示这是最后执行的规则,避免重复匹配[P]代表用反向代理转发请求,如果是静态文件,只保留[L]即可
配置完成后重启Apache:sudo systemctl restart apache2
小提示
- 测试前可以先看服务器日志(Nginx:
/var/log/nginx/access.log;Apache:/var/log/apache2/access.log),确认请求是否正确转发 - 如果有不需要重写的特殊路径(比如
/admin),可以在规则前加排除条件,避免被错误转发
内容的提问来源于stack exchange,提问作者Nikunj Ranpura
相关产品推荐
相关产品推荐

