Url使用和不使用查询字符串重写mod_rewrite

时间:2012-10-02 22:34:22

标签: apache .htaccess mod-rewrite url-rewriting friendly-url

我正在尝试使用以下代码从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,以保持两个规则都有效?

3 个答案:

答案 0 :(得分:1)

好吧,我觉得我把它混合在了Jimp&乔恩代码

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...

答案 1 :(得分: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/

答案 2 :(得分: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