友好的URL,带斜杠的参数

时间:2012-11-28 08:46:07

标签: regex .htaccess friendly-url url-encoding

我的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

2 个答案:

答案 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);