2015-03-13 61 views
1

考虑到以下网址结构:http://localhost/name/name.htaccess - 如何根据lookahead正则表达式规则比较url中的名称?

而下面的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?

+0

我能问你你想实现什么捕获值的向后引用?意思是什么不起作用,我不是指你的规则。它似乎使用环境变量是过分复杂的事情。 – 2015-03-13 16:07:44

+0

我只是试图在htaccess中将'name/name'与前瞻正则表达式规则相匹配,并且我在问,因为我是新的lookahead正则表达式,我不明白。我不认为这个问题与环境变量有什么关系。 – RafaSashi 2015-03-13 16:17:34

回答

1

如何根据lookahead regex规则检查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] 
  • #只是作为两个变量之间的隔板。它可以是任何东西。
  • ([^#]+)捕捉第一个变量DIR_NAME在匹配组#1
  • \1是从第一个字符串
0

试试这个正则表达式。如果目录不等于文件将不匹配

:\/\/\w+\/(\w+)\/(?=\1) 

演示here

+0

谢谢!你能提供一个htaccess正则表达式来匹配只有'dir1/dir1'。 '%{ENV:ORIG_REQUEST} ^(\ w +)/(?= \ 1)$ [NC]'不起作用 – RafaSashi 2015-03-13 16:05:09

+1

@RafaSashi,consultez laréponsede anubhava! J'airéponduàta question avant tadernièreédition。 – 2015-03-13 16:32:05

+0

sans rancune;) – RafaSashi 2015-03-13 16:42:28