我使用用户提供的内容来生成URL。
我的一个URL有标题Kikar Habusiness - émission du 2/12/12
,它转换为URL /url/Kikar+Habusiness+-+émission+du+2%2F12%2F12
。
它转到404。如果我从URL中删除%2F
,它将正常工作。
有趣的是,我的php代码(使用Yii)通常用自定义页面处理404,但这一次返回的是默认的Apache 404,这让我相信它甚至没有到达我的引导文件。
.htaccess的内容如下:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
我的Yii parseUrl是这样的:
public function parseUrl($manager, $request, $pathInfo, $rawPathInfo) {
if(preg_match('%^url/(\d+)%',$pathInfo,$matches)){
$_GET['id'] = $matches[1];
return 'url/view';
}
else if(preg_match('%^category/(\d+)%',$pathInfo,$matches)){
$_GET['id'] = $matches[1];
return 'category/view';
}
return false;
}
我的URL插件生成器是:
public static function slug($title){
$title = ToolBox::trim($title,60,false);
$title = urlencode($title);
return $title;
}
请注意,我不能有基本的ASCII网址,因为有些内容是非拉丁语(如希伯来语或阿拉伯语)。
2条答案
按热度按时间xpcnnkqh1#
这是Apache中的一个常见问题,幸运的是与Yii无关。
Apache会自动拦截任何含有% 2F(/)和% 5C(\)编码部分的URL。它甚至不会触及任何mod_proxy或mod_rewrite规则。
根据您的环境,有许多方法可以解决这个问题,而不需要更改太多代码,包括:
urlencode()
值有关完整列表和说明,请参阅此处:http://www.jampmark.com/web-scripting/5-solutions-to-url-encoded-slashes-problem-in-apache.html
更多信息,因为链接已关闭
如果你可以访问它,你可以启用AllowEncodedSlashes指令,这是一个非常古老的半安全修复程序,它在默认情况下是关闭的。这将解决这个问题。如果你不能访问Apache配置,那么你将不得不寻找其他解决方案。
yv5phkfx2#
jampark url重定向到错误的页面,请使用下面的url:http://www.leakon.com/archives/865