【问题标题】:URL Rewriting including titleURL重写包括标题
【发布时间】:2011-10-19 22:01:32
【问题描述】:

最初我成功地使用 id 重写了 url

使用 htaccess 代码

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

和链接代码

a href="link/id.html"> 

显示成功:

然后我尝试制作这样的网址: mysite.com/link/尼泊尔徒步旅行/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 重写为所需的格式并收到消息 服务器上找不到请求的url

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

我想知道,需要帮助

谢谢

【问题讨论】:

  • 网址总是以'/'开头,而不是?

标签: php .htaccess


【解决方案1】:

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

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

祝你好运!

【讨论】:

  • 非常感谢阿迪,我按照你说的实现了代码,并且运行良好。干杯:)
  • @AdiUlici 嗨,阿迪,我是 URL 重写的新手,我正在努力理解你的答案。您在 .php 页面中使用该功能,其中将显示链接(例如:www.website.com/link/trekking-in-nepal),然后,当您单击它时,服务器会解释重写的链接以点击“真实”页面 www.website.com/link/post.php?name=trekking_in_nepal 基于您在 .htacces 中编写的规则;这个推理对吗?
  • @brigo 你好,是的,你的推理是正确的。这就像为/link/post.php?name=[name]/link/[name] 创建一个别名
【解决方案2】:

试试:

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

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

【讨论】:

  • 是的,我犯了一个无意义的错误....把 link_id=$1 而不是 $2 [a-zA-Z0-9_-]...我想我们不能在这里添加空格,我会研究更多关于 rawurlencode 并在未来的项目中实施 thx a lot ))
  • @Frozenfire:你可以使用它,我已经给了你重写规则,我建议的规则也适用于带空格的字符串。但是,建议不要使用空格。
  • 真的吗?但是当我使用您的代码时,页面没有打开。出现错误“服务器遇到内部错误或配置错误,无法完成您的请求。”但是在我用 [a-zA-Z0-9_-] 替换 [a-zA-Z0-9_-] 之后,它可以工作......所以想知道它是否适用于空间......也许有一些服务器问题。
  • @Frozenfire:如果第二个版本有效,那么就这样做。但是,如果这也不起作用,那么您必须向我们展示 .htaccess 文件中已有的内容,以便我们建议您应该将这一行放在哪里。
  • 是的,第二个版本现在正在运行......只是想知道为什么空间不接受......我用'-'分隔标题词,它现在正在工作...... ....无论如何,谢谢她
猜你喜欢
  • 2018-07-05
  • 2013-03-05
  • 1970-01-01
  • 2010-11-20
  • 2014-12-24
  • 1970-01-01
  • 2011-05-23
  • 2013-03-04
  • 1970-01-01
相关资源
最近更新 更多