【发布时间】:2014-12-29 15:59:25
【问题描述】:
我正在尝试弄清楚如何管理 .htaccess 中潜在的冲突条件
我的设置如下: - 我有一个 CMS 在可以通过 myCMSdomain.com 访问的服务器上运行,其中 myCMSdomain.com 将是 CMS 主页,myCMSdomain.com/admin 将是管理界面。 - 使用此 CMS 的站点应指向 myCMSdomain.com/sites/index.php - 所有网站的图片都可以在 myCMSdomain.com/admin/images/sitename/...后面的某个地方找到。
以下是我尝试解决此问题的方法:
RewriteCond %{HTTP_HOST} !^(www.)?myCMSdomain.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . sites/index.php
这样,所有来自其他域名的传入请求都会被 index.php 文件正确处理,但由于图像托管在其他地方,我想使用一条规则,即应该在其他地方获取图像,如下所示:
图片可见的url格式为:images-[sitename]/[image_path] 图片的真实位置是:admin/site/[sitename]/[image_path]
以下规则有效,但不能与第一条规则结合使用
重写规则图像-([a-zA-Z0-9]+)/(.*)$ admin/site/$1/images/$2
图像最终调用 index.php 而不是使用我为它们定义的规则。 我试图从条件中排除图像目录,但它也不起作用:
RewriteCond %{REQUEST_URI} !(images-([a-zA-Z0-9]+)/(.*))
我将来可能会遇到类似的问题,但有其他例外,所以我想知道是否有办法处理这个问题。
谢谢! 洛朗
更新 1: 如果我在所有其他规则之上使用以下规则
仅当我使用 myCMSdomain.com 域名时才有效 如果我使用像 anotherdomain.com 这样的任何其他域,则该规则会导致 http 500
RewriteRule images-([a-zA-Z0-9]+)/(.*)$ manager/site/$1/images/$2
所以http://www.myCMSdomain.com/images-test/test.jpg 引导我找到正确的图像 但是http://www.anotherdomain.com/images-test/test.jpg 导致我收到 500 http 错误代码,而此域正确指向站点/index.php
更新 2: 应贾斯汀的要求,这里是服务器上物理目录结构的视图
/admin/
/admin/site
/admin/site/site_name/
/admin/site/site_name/images/
/sites/
/sites/js
/sites/css
【问题讨论】:
-
您的 .htaccess 在此路径中的什么位置?对于哪个 URL,您会得到 500,您使用什么确切的 URL?还要检查您的 Apache error.log 以了解 500 错误的原因
-
htaccess 文件位于根目录下,比 /admin/ 或 /sites 高一级。它不是专用服务器,我无法访问所有日志,但据我所知,我有一个反复出现的错误:由于可能的配置错误,请求超出了 10 个内部重定向的限制。如有必要,使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”获取回溯。
-
我还需要知道根目录下的任何子目录中是否还有另一个.htaccess?
-
不,它是此服务器上唯一的 htaccess。谢谢
-
您需要启用
RewriteLog并在您获得500 时添加有问题的重写日志。
标签: .htaccess mod-rewrite