.htaccess否定前瞻正则表达式格式错误

时间:2013-06-28 11:10:11

标签: regex apache .htaccess regex-negation negative-lookahead

以下是我的.htaccess文件中的一段。 我想从Apache获得以下行为(目前该站点位于localhost,但这不重要,对吗?):

如果请求的资源是

以外的任何其他资源
{site_url}/core 

{site_url}/login 

喜欢

{site_url}/pseudo/path/name

所提供的资源必须是

{site_url}/site/pseudo/path/name

否则,所提供的网址必须是{site_url} / core或{site_url} / login,即所请求的内容。

.htaccess文件是:

<IfModule mod_alias.c>

    AliasMatch ^/(?!core|login)(/?.*)$ /site/$2
    Header add X-Enabled mod_alias

</IfModule>

但这似乎不起作用并返回错误。我对正则表达式不是很熟悉,我正在尝试学习这些。所以我从这个表达式推断出来的是:

如果'/'后的表达式,即site_url之后的URI与核心或登录(?!core | login)不匹配,后跟任何内容,包括子文件夹(/?。*)。斜杠及其后面的任何内容,将别名设置为/ site /(在第二个括号中匹配的任何内容)。

该模块正在运行,我仅使用Header添加部件检查,问题是正则表达式。

请帮忙。

1 个答案:

答案 0 :(得分:2)

在开头处取消 ^ 。您拥有的正则表达式将匹配/pseudo/path/name但不匹配{site_url}/pseudo/path/name,因为您告诉它该文本必须以 / 开头。

另外,请注意,因为正则表达式排除了{site_url}/corel之类的内容。除非你有其他目录以核心开头,否则这可能不会成为问题,但如果你真的想让它与{site_url}/core{site_url}/login以外的任何目录匹配,请使用此正则表达式:

/(?!core$|login$)(/?.*)$