我的htaccess文件中有以下规则:
RewriteRule ^product/(.*)/(.*)/([0-9]+)$ product_page.php?prod=$1&code=$3&lang=$2 [QSA]
当我的产品名称中有/斜杠/时 -
http://www.mySite/product/namePart1/namePart2/_lang2/722工程
但
http://www.mySite/product/namePart1%2FnamePart2/_lang2/722不起作用
任何提示为什么?我认为将/转换为 %2F [使用 rawurlencode] 将解决问题。但它产生了问题!
谢谢
阿塔拉
我建议您创建产品名称的某种 slug。据我所知,这是 apache 中的一个设置,允许您在 url 中使用编码的斜杠。
这可能有助于您:
http://www.jampmark.com/web-scripting/5-solutions-to-url-encoded-slashes-problem-in-apache.html
您也可以轻松创建执行类似操作的 slug
function slug($phrase, $maxLength = 255) {
$result = strtolower($phrase);
$result = preg_replace("/[^a-z0-9s-]/", "", $result);
$result = trim(preg_replace("/[s-]+/", " ", $result));
$result = trim(substr($result, 0, $maxLength));
$result = preg_replace("/s/", "-", $result);
return $result;
}
我会采取简单实用的方法,在rawurlencode()
调用后将%2F
替换回斜杠,如下所示:
$nameencoded = rawurlencode($product_name);
$nameencoded = str_replace('%2F', '/', $nameencoded);