URL重写包括标题

时间:2011-08-04 11:30:30

标签: php .htaccess

最初我成功使用id

重写网址

使用htaccess代码

RewriteRule ^link/([0-9]+)\.html$ sub_index.php?link_id=$1 

和链接代码

a href="link/id.html"> 

成功显示:

然后我试着像这样制作网址: mysite.com/link/Trkking in Nepal / 6.html “尼泊尔徒步旅行”是数据库中的标题

我写了 htaccess代码

RewriteRule ^link/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ sub_index.php?link_id=$1 

和链接代码

a href="link/title/id.html">

我无法成功将我的网址重写为所需格式并获取消息 在服务器上找不到请求的URL

当我在其他网站搜索时,我没有看到空格,标题写成“徒步在尼泊尔”。

我想知道,需要帮助

由于

2 个答案:

答案 0 :(得分:4)

首先,您的重写代码不正确:

RewriteRule ^link/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ sub_index.php?link_id=$1

您的link_id为2美元,您的标题为1美元。所以你应该使用:

RewriteRule ^link/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ sub_index.php?link_id=$2

然后你应该为你的标题使用slug函数,所以它更友好的url。我使用这样的东西:

function slug($string, $spaceRepl = "-") {
  // Replace "&" char with "and"
  $string = str_replace("&", "and", $string);

  // Delete any chars but letters, numbers, spaces and _, -
  $string = preg_replace("/[^a-zA-Z0-9 _-]/", "", $string);

  // Optional: Make the string lowercase
  $string = strtolower($string);

  // Optional: Delete double spaces
  $string = preg_replace("/[ ]+/", " ", $string);

  // Replace spaces with replacement
  $string = str_replace(" ", $spaceRepl, $string);

  return $string;
}

slug("Trekking in Nepal")将为trekking-in-nepal,因此您的链接将为:

/link/trekking-in-nepal/6.html

然后它应该与你的重写代码一起工作。

另外,我喜欢像这样重写我的链接:

/link/trekking-in-nepal-6.html

为此,我使用以下内容:

RewriteRule ^link/([a-zA-Z0-9_-]+)-([0-9]+)\.html$ sub_index.php?link_id=$2
祝你好运!

答案 1 :(得分:1)

尝试:

RewriteRule ^link/([a-zA-Z0-9_- ]+)/([0-9]+)\.html$ sub_index.php?link_id=$2 

但是,输出标题时应使用rawurlencode,以使其在任何类型的浏览器上都能正常工作。