尝试安装精彩的Concrete5 CMS作为我的主站点引擎 - 问题是它有大约15个不同的文件和目录,它们弄乱了我的根。我真的想将它移到/_concrete/
子目录中,并仍然在域根目录中维护它。
htaccess从未成为我的强项 - 经过大量的研究和学习,以及大量的错误500,我的沮丧压倒了我的骄傲,我在这里张贴。这正是我想要实现的目标:
www.domain.com
发出的任何请求都会转发到www.domain.com/_concrete/
,但现有文件除外。www.domain.com
,即使他们已投放www.domain.com/_concrete/
。www.domain.com
的请求。这是我用我的htaccess最接近的,它会产生错误500:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^_concrete
RewriteRule ^(.*)$ _concrete/$1 [L,QSA]
这是4小时的汗水和血液(主要是血液)的结果,所以我必须要靠近。我希望你的一个优秀的头脑可以指出一个愚蠢的错误,并迅速让这件事得以休息。谢谢你的时间!
附录:我刚才发布了.htaccess - alias domain root to subfolder,这让我开始了。请不要陷入认为它是重复的陷阱。
答案 0 :(得分:1)
问题是内部重定向循环,
%{REQUEST_FILENAME}
包含文件的绝对系统路径(/ home / user / ...)而不是Url Path,
第三个条件表明所请求文件的系统路径以_concrete
开头,永远不会成为现实。
重现发生的事情,例如,请求/contact
(不是文件):
url传递所有重写条件,请求被内部重定向到/_concrete/contact
,现在Mod_Rewrite将再次重新执行htaccess(L
标志仅当前运行,如果url已更改,则规则将是再次应用于新网址
因此,新网址/_concrete/contact
也会传递所有条件并重写为/_concrete/_concrete/contact
,依此类推......
这将产生一个重定向循环,Apache将输出500错误消息
要解决这个问题,你必须改变你的第三个条件:
RewriteCond %{REQUEST_URI} !^/_concrete