繁体   English   中英

在Apache中压缩重写规则

[英]condensing rewrite rules in apache

这些是我的重写规则。 第一条规则是有问题的,它是我要达到的目标。 最后四个工作,但这是一个过大的杀伤力。

RewriteRule ^([^/^.]+)/([0-9]{4})([a-z]{3})([0-9]{2})/p(([0-9]{1,5})-([0-9]{1,3}))?$ /test2-$1-$2-$3-$4-$5-$6


RewriteRule ^([^/^.]+)/([0-9]{4})([a-z]{3})([0-9]{2})/p([0-9]{1,5})-([0-9]{1,3})$ /test-$1-$2-$3-$4-$5-$6
RewriteRule ^([^/^.]+)/([0-9]{4})([a-z]{3})([0-9]{2})/p([0-9]{1,5})-$ /test-$1-$2-$3-$4-$5
RewriteRule ^([^/^.]+)/([0-9]{4})([a-z]{3})([0-9]{2})/p([0-9]{1,5})$ /test-$1-$2-$3-$4-$5
RewriteRule ^([^/^.]+)/([0-9]{4})([a-z]{3})([0-9]{2})/p$ /test-$1-$2-$3-$4

我想做的是使用一个重写器而不是四个重写器来处理以下格式的URL:

http://example.com/word/####wor##/p#-###
http://example.com/word/####wor##/p#-
http://example.com/word/####wor##/p#
http://example.com/word/####wor##/p

有什么办法可以将我的重写器压缩为一个而不是四个?

如有必要,我将在以后添加更多信息。

可能有更优雅的方法来解决此问题,但以下方法应该起作用:

RewriteRule ^([^/^.]+)/([0-9]{4})([a-z]{3})([0-9]{2})/p(?:([0-9]{1})|([0-9]{1})-|([0-9]{1})-([0-9]{3})){0,1}$ /test-$1-$2-$3-$4-$5-$6-$7-$8 [L,NC]

分解:

第一部分是到目前为止您正在做的事情。 它涵盖了捕获结果$1$4

然后是/p ,接着是一个大的组,该组被分成几个用竖线字符|分隔的交替| 此组中包含的一个选项应匹配零次或一次/p(?:...|...|...){0,1}

该组开头的?:表示整个组都不应该用于捕获,因为您不一定要捕获最终结果(例如当它包含- ),因此我们将仅坚持捕获相关的子组。 这也意味着,在对捕获组进行计数以了解哪个捕获变量转换为变量( $1$2等)时,您将不对该捕获组进行计数。

这些替换匹配您为URL提供的3个变体,其中/p后跟其他内容:

([0-9]{1})
([0-9]{1})-
([0-9]{1})-([0-9]{3})


请注意,在最终结果/test-$1-$2-$3-$4-$5-$6-$7-$8并非所有变量都可以匹配某些内容,具体取决于URL的模式。 有些可能会保持空白。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM