1

尝试安装出色的 Concrete5 CMS 以用作我的主要站点引擎 - 问题是它有大约 15 个不同的文件和目录,它们使我的根目录混乱。我真的很想把它移到一个/_concrete/子目录中,并且仍然在域根目录中维护它。

htaccess 从来都不是我的强项——经过大量的研究和学习,以及很多错误 500,我的挫败感压倒了我的骄傲,我在这里发帖。这正是我想要完成的:

  • 任何通过的请求www.domain.com都将转发到www.domain.com/_concrete/,除非是现有文件。
  • 最终用户 URL不应更改 - 他们仍将站点视为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 - 别名域根目录发布到子文件夹,这让我开始了。请不要陷入认为它是重复的陷阱。

4

1 回答 1

1

问题是内部重定向循环, %{REQUEST_FILENAME}包含文件的绝对系统路径(/home/user/...)而不是 URL 路径,您的第三个条件表明所请求文件的系统路径以_concrete它永远不会为真。

要重现发生的情况,例如向/contact(不是文件)发出请求:url传递所有重写条件并且请求在内部被重定向到/_concrete/contact,现在Mod_Rewrite将再次重新执行htaccess(L仅标记sto当前运行,如果 url 已更改,规则将再次应用于新 url)

所以,新的 url/_concrete/contact也将传递所有条件并重写/_concrete/_concrete/contact 等等......这将产生一个重定向循环,Apache 将输出 500 错误消息

要解决这个问题,你必须改变你的第三个条件:

RewriteCond %{REQUEST_URI} !^/_concrete
于 2013-07-01T23:03:13.920 回答