如果页面标题有破折号,则mod_rewrite会出现URL问题

时间:2014-03-06 09:09:58

标签: .htaccess mod-rewrite

我有一个通常是这样的页面:

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]

然后网址变为:

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

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

有没有办法让它像

一样运作
http://www.url.com/this-is-the-page-title-129.html

即使页面标题用短划线分隔?

谢谢:)

1 个答案:

答案 0 :(得分:0)

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

所以,相反,让第一部分由任何让斜线:

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

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