htaccess RewriteRule一个参数包含其他参数

时间:2012-12-17 12:48:33

标签: regex apache .htaccess mod-rewrite

我第一次遇到了一个问题,并且不知道为什么我有这个问题。 下面你看到我的.htaccess文件的三行。使用/urun/test-123的{​​{1}}时,urundetay.php必须使用/urunlerimiz/。问题是因为'urunlerimiz'中包含'urun',所有这三个链接都使用urunlerimiz.php

urundetay.php

当我将这些参数设置为完全不同时,它可以正常工作。但我必须这样使用它,我想学习。 解决方案是什么?

2 个答案:

答案 0 :(得分:1)

您需要在模式中使用否定前瞻,以便字符串lerimiz不会产生匹配。因此,RewriteRule RewriteRule ^urun(?!lerimiz)/?(.*)$ urundetay.php [NC] 所使用的正则表达式模式与Perl兼容,您应该能够这样做:

{{1}}

答案 1 :(得分:1)

我在我的一个项目中遇到过这个问题,这就是我解决它的方法:

RewriteRule ^urunlerimiz(/.*|)$ urunlerimiz.php [NC,L]
RewriteRule ^urun(/.*|)$ urundetay.php [NC,L]
RewriteRule ^urun-kategor(/.*|)$ urundetay.php [NC,L]

欺骗是在每个关键字后附加(/.*|)

e.g。对于正则表达式^urun(/.*|)$,这将匹配/urun/urun//urun/foo但不匹配/urunlerimiz/urun-kategor