以下是我的.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添加部件检查,问题是正则表达式。
请帮忙。
答案 0 :(得分:2)
在开头处取消 ^ 。您拥有的正则表达式将匹配/pseudo/path/name
但不匹配{site_url}/pseudo/path/name
,因为您告诉它该文本必须以 / 开头。
另外,请注意,因为正则表达式排除了{site_url}/corel
之类的内容。除非你有其他目录以核心开头,否则这可能不会成为问题,但如果你真的想让它与{site_url}/core
或{site_url}/login
以外的任何目录匹配,请使用此正则表达式:
/(?!core$|login$)(/?.*)$