2012-11-28 94 views
0

参数我在我的htaccess文件以下规则:友好的URL,用斜杠

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

为什么第一个案件不要为你工作?为什么你想在第二种情况下使用'%2F'语法? – Nelson

+0

我使用rawurlencode因为一些产品名称的字符不是ASCII。他们可能是法国人的口音,或希伯来字符。 – Atara

回答

2

我建议你建立某种形式的产品名称蛞蝓的。据我所知,它在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; 
} 
+0

链接说明问题,并增加了解决方案。在我的情况,我用 - (str_replace函数(阵列( '%2F', '%5C'),阵列( '%252F', '%255C'),rawurlencode($ strTitle))) – Atara

0

我会去只是更换%2F回斜线后的轻松和务实的方式你的rawurlencode()电话,像这样:

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