我使用用户提供的内容来生成 URL。
我的一个 URL 有标题Kikar Habusiness - émission du 2/12/12
,它转换为 URL /url/Kikar+Habusiness+-+émission+du+2%2F12%2F12
。
它进入 404。如果我%2F
从 URL 中删除它,它工作正常。
一个有趣的事情是我的 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 slug 生成器是:
public static function slug($title){
$title = ToolBox::trim($title,60,false);
$title = urlencode($title);
return $title;
}
请注意,我不能有基本的 ASCII URL,因为有些内容是非拉丁语(例如希伯来语或阿拉伯语)。