【问题标题】:friendly URL, parameter with slashes友好的 URL,带斜杠的参数
【发布时间】:2012-11-16 01:37:45
【问题描述】:

我的 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] 可以解决问题。但它会产生问题!

谢谢,

阿塔拉

【问题讨论】:

  • 为什么第一个案例不适合你?为什么要在第二种情况下使用%2F 语法?
  • 我使用 rawurlencode 是因为产品名称中的某些字符不是 ascii。它们可能是法语口音,也可能是希伯来语字符。

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


【解决方案1】:

我建议您创建某种产品名称的 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-9\s-]/", "", $result);
    $result = trim(preg_replace("/[\s-]+/", " ", $result));
    $result = trim(substr($result, 0, $maxLength));
    $result = preg_replace("/\s/", "-", $result);

    return $result;
}

【讨论】:

  • 该链接解释了问题,并添加了解决方案。就我而言,我使用 - (str_replace(array('%2F','%5C'), array('%252F','%255C'), rawurlencode($strTitle)))
【解决方案2】:

我会采取简单实用的方法,在您的 rawurlencode() 调用后将 %2F 替换回斜线,如下所示:

$nameencoded = rawurlencode($product_name);
$nameencoded = str_replace('%2F', '/', $nameencoded);

【讨论】:

    猜你喜欢
    • 2011-09-13
    • 2015-09-07
    • 2014-10-04
    • 1970-01-01
    • 2011-12-14
    • 2012-04-22
    • 2015-03-06
    • 1970-01-01
    相关资源
    最近更新 更多