我有一个通常是这样的页面:
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
即使页面标题用短划线分隔?
谢谢:)
答案 0 :(得分:0)
问题是,您指定([^-]*)
这意味着匹配的子模式不应包含任何破折号......但您的页面标题可能包含它们。
所以,相反,让第一部分由任何让斜线:
RewriteRule ^([^/]*)-([0-9]+)\.html$ /folder/content.php?name=$1&item_id=$2 [L]
这样,最后一个破折号前的所有内容都将进入第一个子模式,最后一个破折号后的数字进入第二个子模式。