关于可选正则表达式的简短问题:
想象一下当前重写/美化的给定页面:
/xx/somepage/description-description-description
实际上将丑陋的网址加载到水下:
/somepage?ln=xx
通过这个看似有效的规则:
RewriteRule ^([a-z][a-z])/(.*)/(.*?)$ /$2?ln=$1 [L]
但是,目前最后一部分/description
现在是强制性的。没有它,会发生错误404。我应该使用什么RewriteRule来使第三部分和最后一部分可选?特别是因为它没有文件提取的含义,只是让用户使网址更具描述性。
换句话说,我希望以下三个方面的工作方式相同:
/xx/somepage
/xx/somepage/description-description-description
非常感谢
这两个似乎都很好:
RewriteRule ^([a-z][a-z])/(.*?)(/.*)?$ /$2?ln=$1 [L]
RewriteRule ^([a-z][a-z])/([^/]+)(/.*)?$ /$2?ln=$1 [L]
差异在于中间部分。我认为它与贪婪有关...但是为什么/如何完全不同......其他人可能会在这里发光。
答案 0 :(得分:2)
删除规则中的最终/
,或将其放在可选组中。就目前情况而言,从我看到的情况来看,描述并非完全必要,但是尾部斜线是。
新RegEx:
RewriteRule ^([a-z][a-z])/(.*?)(/.*)?$ /$2?ln=$1 [L]
答案 1 :(得分:1)
您可能需要确保第二个模式不包含斜杠:
RewriteRule ^([a-z][a-z])/([^/]+)(/.*)?$ /$2?ln=$1 [L]