0

以下是我的 .htaccess 文件中的一段。我想要 Apache 的以下行为(目前该站点位于 localhost,但这没关系,对吧?):

如果请求的资源不是

{site_url}/core 

或者

{site_url}/login 

喜欢

{site_url}/pseudo/path/name

提供的资源必须是

{site_url}/site/pseudo/path/name

否则,提供的 URL 必须是 {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 (?!core|login)) 不匹配,并且后跟任何内容,包括子文件夹 (/?.*)$ 可选斜杠,以及后面的任何内容,将别名设置为 /site/(第二个括号中匹配的任何内容)。

该模块正在工作,我只使用 Header add 部分进行了检查,问题是正则表达式。

请帮忙。

4

1 回答 1

2

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

另外,要小心,因为您的正则表达式不包括{site_url}/corel. 除非您有其他以core开头的目录,否则这可能不会成为问题,但是如果您真的想让它匹配除{site_url}/coreor以外的任何内容{site_url}/login,请使用此正则表达式:

/(?!core$|login$)(/?.*)$
于 2013-06-29T00:36:17.797 回答