【问题标题】:mod_rewrite issues with URL if page title has dashes如果页面标题有破折号,则 URL 的 mod_rewrite 问题
【发布时间】:2014-04-08 19:25:02
【问题描述】:

我的页面通常是这样的:

http://www.url.com/folder/content.php?name=this-is-the-page-title&item_id=129

如您所见,页面标题包含在 URL 中,用破折号分隔。

所以,我想使用 mod_rewrite 将其转换为以下内容:

http://www.url.com/this-is-the-page-title-129.html

为此,我使用 mod_rewrite 规则,例如:

RewriteRule ^([^-]*)-([^-]*)\.html$ /folder/content.php?name=$1&item_id=$2 [L]

不幸的是,使用该规则,我收到了 404 错误。我认为问题在于标题由破折号 (-) 分隔,而分隔符本身也是破折号,因此它可能无法将变量彼此或类似的东西区分开来。

当我像这样将规则从破折号 (-) 更改为斜线 (/) 时,它可以正常工作:

RewriteRule ^([^-]*)/([^-]*)\.html$ /folder/content.php?name=$1&item_id=$2 [L]

但随后 URL 变为:

http://www.url.com/this-is-the-page-title/129.html

...我不想这样做,因为我必须重写页面的整个结构。

有什么办法可以让它发挥作用

http://www.url.com/this-is-the-page-title-129.html

即使页面标题用破折号分隔?

谢谢你:)

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    问题是,您指定了([^-]*),这意味着匹配的子模式不应包含任何破折号......但您的页面标题可能包含它们。

    所以,让第一部分改为 anything,但斜线:

    RewriteRule ^([^/]*)-([0-9]+)\.html$ /folder/content.php?name=$1&item_id=$2 [L]
    

    这样,最后一个破折号之前的所有内容都将进入第一个子模式,最后一个破折号之后的数字 - 进入第二个。

    【讨论】:

      猜你喜欢
      • 2022-09-29
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 2011-08-25
      • 2022-11-22
      • 2020-11-18
      • 1970-01-01
      • 2014-09-19
      相关资源
      最近更新 更多