You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.htaccess将URL重写指向目录中最后一个子文件夹?

用.htaccess实现访问根目录自动指向最新版本子文件夹

当然可以实现这个需求!根据你的服务器权限情况,我准备了两种方案,你可以按需选择:

方案一:自动识别最新版本(需要服务器配置权限)

如果你能修改Apache的配置文件(比如httpd.conf或者虚拟主机配置),这个方案可以自动抓取目录里版本号最高的子文件夹,不用每次更新版本都手动改规则。

步骤1:写个版本检测脚本

在服务器上新建一个Shell脚本(比如叫get-latest-version.sh),建议放在网站根目录以外的安全位置,内容如下:

#!/bin/bash
# 切换到目标目录
cd /path/to/site
# 列出所有x.y.z格式的子目录,按版本号排序后取最后一个(也就是最新的)
ls -d [0-9]*.[0-9]*.[0-9]* | sort -V | tail -n1

然后给这个脚本加执行权限:

chmod +x /path/to/get-latest-version.sh

步骤2:配置Apache的RewriteMap

打开你的Apache配置文件,添加下面这行:

RewriteMap latestVersion prg:/path/to/get-latest-version.sh

记得把/path/to/get-latest-version.sh换成你实际的脚本路径哦。

步骤3:编写.htaccess规则

在/path/to/site目录下的.htaccess文件里加这些规则:

RewriteEngine On

# 只有当请求的是site目录本身(不带任何子路径)时才触发
RewriteCond %{REQUEST_URI} ^/path/to/site/?$
# 排除已存在的文件或目录,避免出现循环重写的问题
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# *内部重写*到最新版本目录——浏览器地址栏不会变,用户看到的还是原来的URL,但内容是最新版本的
RewriteRule ^$ ${latestVersion}/ [L]

# 如果你想让浏览器地址栏直接跳转到最新版本的URL(比如让用户看到http://host/path/to/site/0.3.0),就把上面的RewriteRule换成下面的:
# RewriteRule ^$ ${latestVersion}/ [R=302,L]
# 提示:R=302是*临时重定向*,要是确定版本不会频繁变动,可以改成R=301(*永久重定向*)

方案二:手动指定最新版本(无需服务器配置权限)

要是你用的是共享主机,没法修改Apache的配置文件,那就用这个简单直接的方案——直接把最新版本写在规则里,每次更新版本时手动改一下.htaccess就行。

在/path/to/site的.htaccess里加这些内容:

RewriteEngine On

# 仅针对site目录本身的请求生效
RewriteCond %{REQUEST_URI} ^/path/to/site/?$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# *内部重写*到0.3.0目录,地址栏不变
RewriteRule ^$ 0.3.0/ [L]

# 想要*外部重定向*的话,换成下面这行:
# RewriteRule ^$ 0.3.0/ [R=302,L]

以后新增版本比如0.4.0时,只要把规则里的0.3.0改成0.4.0就搞定了。

一些注意事项

  • 得确保你的Apache服务器已经开启了mod_rewrite模块,而且网站目录的AllowOverride配置设成了All,不然.htaccess的规则不会生效哦。
  • 如果用了永久重定向(R=301),浏览器会缓存这个规则,后续改版本号后可能需要清一下浏览器缓存才能看到效果。

内容的提问来源于stack exchange,提问作者bjorkblom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:05:41