0

我正在尝试使用以下代码从 domain.com/page/soft-15/android-26/ 重写为 page.php?cat=15&os=26:

RewriteRule ^page/([0-9]+)\-([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)$ page.php?cat=$1&os=$2

我认为它工作正常,但是,我怎样才能将 domain.com/page/ 和 domain.com/page (没有最后一个正斜杠)重写为 domain.com/page.php 以保持这两个规则的工作?

4

3 回答 3

1

好吧,我想我把 Jimp 和 Jon 代码混合在一起了

RewriteRule ^page/?$ page.php [L]
RewriteRule ^page/(?:[a-zA-Z0-9-]*-)?([0-9]+)/(?:[a-zA-Z0-9-]*-)?([0-9]+)/?$ page.php?cat=$1&os=$2 [L]
RewriteRule ^page/(?:[a-zA-Z0-9-]*-)?([0-9]+)/?$ page.php?cat=$1 [L]

这个数学与

domain.com/page
domain.com/page/
domain.com/page/soft-15
domain.com/page/soft-15/
domain.com/page/15
domain.com/page/15/
domain.com/page/soft-15/android-26
domain.com/page/soft-15/android-26/
domain.com/page/soft-15/26
domain.com/page/15/26
and so on...
于 2012-10-03T12:41:39.650 回答
0

/?在您的模式中添加尾随(在$锚点之前)。使可选?/

此外,您的模式似乎落后,匹配字符前的数字。试试这个:

RewriteRule ^page/(?:([a-zA-Z\d-]*)-)?(\d+)/(?:([a-zA-Z\d-]*)-)?(\d+)/?$ page.php?cat=$1&os=$2

这应该与这些变化相匹配,如下所示:

domain.com/page/soft-15/android-26
domain.com/page/soft-15/android-26/
domain.com/page/15/android-26
domain.com/page/15/android-26/
domain.com/page/soft-15/26
domain.com/page/soft-15/26/
domain.com/page/15/26
domain.com/page/15/26/
于 2012-10-02T22:36:11.757 回答
0

您的反向引用似乎与您使用的示例不符:

  • /page/soft-15/android-26/
  • page.php?cat=15&os=26

您的正则表达式看起来很匹配:

  • /page/15-soft/26-android/

并重写为:

  • page.php?cat=15&os=soft

如果你按照你的例子,你会想要这样的东西:

RewriteRule ^page/[a-zA-Z0-9-]*?-([0-9]+)/[a-zA-Z0-9-]*?-([0-9]+)/?$ page.php?cat=$1&os=$2
RewriteRule ^page/[a-zA-Z0-9-]*?-([0-9]+)/?$ page.php?cat=$1
RewriteRule ^page/?$ page.php
于 2012-10-02T22:53:26.757 回答