在根网站配置基于URL后缀匹配的URL重写规则可行性咨询
实现根节点级别的URL重定向/重写规则
当然可以实现!你要的这种只在站点根节点配置、完全不需要下层应用配合的URL路由规则,几乎所有主流Web服务器都能轻松搞定。核心思路就是利用服务器自带的URL重写模块,匹配请求路径后动态拼接目标URL,下面分几种常用服务器给你具体配置方案:
Nginx 配置示例
Nginx的rewrite指令和location块刚好能满足你的需求。在foo站点的配置文件(通常是nginx.conf里的server块)中添加以下规则:
server { listen 8080; server_name foo; # 精确匹配根路径 /,重定向到 http://too location = / { return 302 http://too; } # 匹配所有非根路径的请求,比如 /bar、/baz/qux 等 location / { # 保留原始请求的完整路径(包括查询参数),拼接后重定向 return 302 http://too$request_uri; } }
location = /是精确匹配根路径,确保只有访问http://foo:8080/时才跳转到http://too$request_uri会自动带上原始请求的路径和参数,比如访问http://foo:8080/bar?id=1会直接跳转到http://too/bar?id=1- 如果需要永久重定向(更利于SEO),可以把
302改成301
Apache 配置示例
Apache需要先启用mod_rewrite模块,然后在站点根目录的.htaccess文件(或者httpd.conf的VirtualHost块)里添加规则:
RewriteEngine On # 精确匹配根路径,重定向到 http://too RewriteRule ^$ http://too [L,R=302] # 捕获所有非根路径的内容,拼接后重定向 RewriteRule ^(.*)$ http://too/$1 [L,R=302]
RewriteRule ^$专门匹配空路径(也就是根路径)^(.*)$会捕获所有非空的路径部分,$1就是捕获到的内容,能完美实现路径的完整传递[L]表示这是最后一条匹配规则,避免后续规则干扰;[R=302]指定重定向类型
IIS 配置示例
IIS需要先安装「URL重写」模块,然后通过可视化界面配置:
- 打开IIS管理器,找到
foo站点,进入「URL重写」功能 - 添加两条规则:
- 第一条规则:
- 匹配URL:
^$(精确匹配根路径) - 操作类型:选择「重定向」
- 重定向URL:填写
http://too - 重定向类型:选临时(302)或永久(301)
- 匹配URL:
- 第二条规则:
- 匹配URL:
(.*)(匹配所有路径) - 操作类型:选择「重定向」
- 重定向URL:填写
http://too/{R:1} - 重定向类型:选临时(302)或永久(301)
- 匹配URL:
- 第一条规则:
额外说明
这些配置都只需要在foo站点的服务器配置层面完成,完全不需要下层应用做任何修改。而且你还能轻松扩展更多规则——比如想把/admin跳转到http://another-site/admin,只需要新增对应的匹配规则就行,完美实现单站点的多路径按需路由。
内容的提问来源于stack exchange,提问作者Adamon
相关产品推荐
相关产品推荐

