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