Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess级联条件_.htaccess_Mod Rewrite - Fatal编程技术网

.htaccess级联条件

.htaccess级联条件,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我正试图找出如何管理.htaccess中可能存在冲突的条件 我的设置如下所示: -我有一个运行在服务器上的CMS,可以通过myCMSdomain.com访问,其中myCMSdomain.com是CMS主页,myCMSdomain.com/admin是管理员界面。 -使用此CMS的站点应指向myCMSdomain.com/Sites/index.php -所有网站的图片都可以在myCMSdomain.com/admin/Images/sitename/…后面找到 下面是我如何解决这个问题的: Re

我正试图找出如何管理.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格式为:图像-[sitename]/[image\u path] 图像的实际位置是:admin/site/[sitename]/[image\u 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
所以我找到了正确的图像 但是,当这个域正确地指向sites/index.php时,我发现了一个500 http错误代码

更新2: 根据Justin的请求,下面是服务器上物理目录结构的视图

/admin/
/admin/site
/admin/site/site_name/
/admin/site/site_name/images/
/sites/
/sites/js
/sites/css

您可以重新安排您的条件逻辑

# if www.myCMSdomain.com or myCMSdomain.com -> do nothing
RewriteCond %{HTTP_HOST} ^(?:www\.)?myCMSdomain\.com$ [NC]
RewriteRule ^ - [L]

# if we reach here, this means it's a subdomain/another domain

# images rule
RewriteRule ^images-([^/]+)/(.+)$ /admin/site/$1/images/$2 [L]

# not a file/directory -> sites/index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /sites/index.php [L]
也有可能是您这样做的,但书写时间会更长。

另外,请记住,条件(
RewriteCond
)是非累积的:它们是用于下一个规则(
RewriteRule
的,仅限于我已经为这个问题挣扎了一段时间,但我认为我终于找到了问题所在。看起来域名配置有问题,我不知道具体是什么,但一旦我重新保存了所有域的映射,htaccess就按它应该的方式工作了

最后我使用了贾斯汀的建议,它看起来比我的更能证明未来

谢谢你的帮助,祝大家新年快乐


劳伦特

谢谢你的快速回答,贾斯汀!图像规则会导致http 500错误代码。如果我使用myCMSdomain.com域,则该规则有效,但如果我使用指向服务器的其他域名,则会导致http 500错误。有什么想法吗?你能给我一个更清晰的文件夹树形图吗?因为阅读你的问题很难表现出来,当然,只是增加了细节。看起来不允许外部域返回到结构中并从管理目录中获取某些内容。您必须确保在Apache配置中启用mod_rewrite并且允许htaccess。然后,确保所有其他域都指向与myCMSdomain.com相同的文档根目录,并将htaccess放在根文件夹中。在此之后,如果启用了workmod_rewrite,则当规则被分离并且htaccess位于根目录中时,重写工作正常。您的.htaccess位于该路径的何处?你得到的网址是什么?你使用的确切网址是什么?还要检查Apache error.log,因为500 errorhtaccess文件位于根目录中,比/admin/或/sites高一级。它不是一个专用服务器,我无法访问所有日志,但从我看到的情况来看,我有一个反复出现的错误:由于可能的配置错误,请求超过了10个内部重定向的限制。如有必要,使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”获取回溯。我还需要知道在根目录下的任何子目录中是否存在另一个.htaccess?不,这是此服务器上唯一的htaccess。感谢您需要启用
RewriteLog
,并在您获得500时添加有问题的重写日志。