如何合并.htaccess中两个独立URL重写规则使其按需触发执行?
合并两个.htaccess URL重写规则的解决方案
很简单,只要保证两个规则的匹配模式足够精准,并且调整好规则顺序,就能让它们各自触发对应的重写逻辑。这里给你两种可靠的实现方式:
方式一:精确匹配(最稳妥)
直接用^和$限定匹配的起止,确保每个规则只命中对应的请求路径,不会互相干扰:
RewriteEngine On # 处理 /ac64 的请求 RewriteRule ^ac64$ download.php?file=ac64_05182018.pdf [L] # 处理 /ac 的请求 RewriteRule ^ac$ downloads/ac05182018.pdf [L]
关键细节说明:
^ac64$:^代表路径开头,$代表路径结尾,这就意味着只有当请求**正好是/ac64**时才会触发这条规则,不会误匹配/ac64abc或者/ac。[L]标志:告诉Apache,一旦这条规则匹配成功,就停止处理后续的重写规则,避免不必要的冲突。- 规则顺序:这里其实顺序不影响,因为都是精确匹配,但习惯上我会把更长的路径规则放在前面,逻辑更清晰。
方式二:利用规则顺序(适合扩展更多类似规则)
如果以后可能会有更多类似/acxx的路径,也可以把更具体的规则放在前面,让它先匹配,再处理更通用的/ac:
RewriteEngine On # 先处理更具体的 /ac64 RewriteRule ^ac64$ download.php?file=ac64_05182018.pdf [L] # 再处理通用的 /ac(这里同样用精确匹配避免后续扩展时出问题) RewriteRule ^ac$ downloads/ac05182018.pdf [L]
测试建议:
写完规则后,分别访问yourdomain.com/ac和yourdomain.com/ac64,检查是否正确跳转到对应的目标地址。如果遇到问题,可以开启Apache的重写日志排查,但一般来说上面的配置不会有问题。
内容的提问来源于stack exchange,提问作者dee
相关产品推荐
相关产品推荐

