漂亮的网址弄乱我的变量

时间:2013-05-16 10:31:33

标签: php .htaccess

我有一些代码可以将变量中的所有空格更改为破折号

function url($string) {
  //lower case everything
  $string = strtolower($string);

  //make alphaunermic
  $string = trim($string);

  //Clean multiple dashes or whitespaces
  $string = preg_replace("/[\s-]+/", " ", $string);

  //Convert whitespaces and underscore to dash
  $string = preg_replace("/[\s_]/", "-", $string);

  return $string;
}

//some artist now becomes some-artist, some song now becomes some-song

然后我有一条规则

RewriteRule ^mp3/(.*)-(.*)/?.html$ mp3.php?artist=$1&song=$2 [nc]

所以我可以拥有像

这样的网址
www.example.com/mp3/some-artist-some-song.html

但它混合了艺术家从歌曲中分离出来的东西,如果我在那个页面上回应出艺术家,那么当实际的艺术家变量只是“某个艺术家”时,它会给我“一些艺术家一些”,它似乎第一个变量是最后一个破折号之前的一切,当它不是时,我该如何解决?

2 个答案:

答案 0 :(得分:2)

在我看来,你正在使用短划线来做太多事情。

您无法将其用作空间替代品和边界分隔符,并且仍然希望能够区分some-artist : some-songsome-artist-some : song

其他网站不会将网址拆分以获取数据,但实际上是使用某个艺术家某些歌曲的网址来表示具有artist: some artist和{{1属性的单个特定项目}}。

如果您必须拆分网址,那么答案是在艺术家和歌曲之间使用不同的字符来替换空格。实际上,在您在数据库中添加一个特定于每个轨道的URL的额外列之前,这总会遇到问题。

然后请求mysqite.com/some-artist-some-song,然后在URL列下的数据库中查找一些艺术家的歌曲。这将为您提供正确的曲目,只要URL是唯一的,那么歌曲标题和艺术家的组合无关紧要。

EG。

song: some song

因此,您现在可以唯一地识别某位艺术家的某些歌曲可能是用户要求的歌曲。

答案 1 :(得分:1)

尝试使用:

RewriteRule ^mp3/(.*)_(.*)/?.html$ mp3.php?artist=$1&song=$2 [nc]

这样,您可以拥有http://yourdomain.com/mp3/some-artist_some-song/。我不确定这与SEO中的some-artist/some-song相比如何。无论哪种方式,您都不能使用破折号来替换空格和作为分隔符。