Yii1.1中使用urlManager重定向URL的配置问题
Yii1.1 URL重定向问题解决
核心问题
URL中的#是锚点(fragment),浏览器不会将锚点部分发送到服务器,你的Yii后端根本接收不到#/[string]这部分内容,所以配置的urlManager规则自然无法生效。
解决方案
方案1:替换锚点为合法路径字符(推荐服务器端处理)
把URL中的#换成服务器能识别的字符(比如/、自定义标识等),再修改urlManager规则:
'urlManager'=>array( 'urlFormat'=>'path', 'showScriptName'=>false, 'rules'=>array( // 对应 /info/[string] 跳转至 /site/info?value=[string] 'info/<value:\w+>' => 'site/info', // 若要保留中间分隔标识,可改为如下写法 // 'info/detail/<value:\w+>' => 'site/info', ), )
方案2:前端JS处理(仅当必须保留#时使用)
如果一定要保留#结构,只能通过前端JS捕获锚点内容后跳转——只有前端能获取到锚点信息。在/info页面中添加以下代码:
window.addEventListener('load', function() { const hashContent = window.location.hash; // 匹配 #/[string] 格式的锚点 if (hashContent.startsWith('#/')) { const value = hashContent.slice(2); // 跳转时编码参数,避免特殊字符引发问题 window.location.href = '/site/info?value=' + encodeURIComponent(value); } });
内容的提问来源于stack exchange,提问作者Andrew Sparrow
相关产品推荐
相关产品推荐

