.htaccess - 如何基于前瞻性正则表达式规则比较url中的名称?

时间:2015-03-13 15:19:35

标签: regex apache .htaccess mod-rewrite

给出以下网址结构:http://localhost/name/name

以下env变量:

RewriteRule ^.* - [E=ORIG_REQUEST:name/name]
RewriteRule ^.* - [E=DIR_NAME:name]
RewriteRule ^.* - [E=FILE_NAME:name]

如何根据DIR_NAME正则表达式规则检查FILE_NAME是否等于lookahead

我有什么:

RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{ENV:ORIG_REQUEST} ^([^/]+)/(?=\1)$ [NC]
RewriteRule - [E=IS_EQUAL:true]

.htaccess - how to remove repeated words in url?启发

2 个答案:

答案 0 :(得分:1)

  

如何基于前瞻性正则表达式规则检查DIR_NAME是否等于FILE_NAME

这应该适合你:

RewriteRule ^ - [E=ORIG_REQUEST:name/name]
RewriteRule ^ - [E=DIR_NAME:name]
RewriteRule ^ - [E=FILE_NAME:name]

RewriteCond %{ENV:DIR_NAME}#%{ENV:FILE_NAME} ^([^#]+)#\1$
RewriteRule ^ - [E=IS_EQUAL:true]
  • #仅用作2个变量之间的分隔符。它可以是任何东西。
  • ([^#]+)捕获匹配组#1中的第一个变量DIR_NAME
  • \1是第一个字符串
  • 中捕获值的反向引用

答案 1 :(得分:0)

试试这个正则表达式。如果dir不等于file

,则不匹配
   :\/\/\w+\/(\w+)\/(?=\1)

演示here