我的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]将解决问题。但它造成了问题!
谢谢,
Atara
答案 0 :(得分:2)
我建议你创建一些产品名称的slug。据我所知,它在apache中的设置允许你在URL中使用编码斜杠。
这可能会对您有所帮助:
http://www.jampmark.com/web-scripting/5-solutions-to-url-encoded-slashes-problem-in-apache.html
你也可以轻松创建一个类似这样的事情
function slug($phrase, $maxLength = 255) {
$result = strtolower($phrase);
$result = preg_replace("/[^a-z0-9\s-]/", "", $result);
$result = trim(preg_replace("/[\s-]+/", " ", $result));
$result = trim(substr($result, 0, $maxLength));
$result = preg_replace("/\s/", "-", $result);
return $result;
}
答案 1 :(得分:0)
我会采用简单实用的方式,在%2F
来电后将rawurlencode()
替换为斜线,如下所示:
$nameencoded = rawurlencode($product_name);
$nameencoded = str_replace('%2F', '/', $nameencoded);