Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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
Apache重写-搜索两个目录_Apache_.htaccess - Fatal编程技术网

Apache重写-搜索两个目录

Apache重写-搜索两个目录,apache,.htaccess,Apache,.htaccess,我正在编写一个应用程序框架,它完全位于应用程序目录的子目录中。我们使用以下htaccess标记添加所需的路径路由: RewriteEngine on RewriteCond $1 !^(index\.php|robots\.txt|assets) RewriteRule ^(.*)$ /index.php/$1 [L] 如您所见,我们向公众开放整个资产文件夹,以获取css、js、图像等静态web文件的资源 我们想要做的是有两个资产文件夹,一个在应用程序目录中,另一个在框架目录中。因此,在物理磁

我正在编写一个应用程序框架,它完全位于应用程序目录的子目录中。我们使用以下htaccess标记添加所需的路径路由:

RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt|assets)
RewriteRule ^(.*)$ /index.php/$1 [L]
如您所见,我们向公众开放整个资产文件夹,以获取css、js、图像等静态web文件的资源

我们想要做的是有两个资产文件夹,一个在应用程序目录中,另一个在框架目录中。因此,在物理磁盘端,当用户请求到
/assets/*
目录的路由时,应该同时搜索
/assets/*
/framework/assets/*
的内容

简单地说,我们需要一个与我们的重写条件兼容的重写条件来合并这两个文件夹。 谢谢

试试看:

# check if exists in frameowkr/assets
RewriteCond %{REQUEST_URI} ^/assets/(.*)$
RewriteCond %{DOCUMENT_ROOT}/framework/assets/%1 -f
RewriteRule ^(.*)$ /framework/$1 [L]

# check if exists in /assets
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^assets/(.*)$ - [L]

您需要填写文件/目录,但请尝试以下操作:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule  ^(.*)$  -  [L]

RewriteCond /PhysicalDirectoryPath/%{REQUEST_URI}  -f [OR]
RewriteCond /PhysicalDirectoryPath/%{REQUEST_URI}  -d
RewriteRule ^(.*)$  /WebDirectoryPath/$1  [L]

试试这个:

RewriteEngine on

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule /?assets/([^/]+) /framework/assets/$1 [L]

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule /?framework/assets/([^/]+) /assets/$1 [L]

在第4行,这是一条规则吗?我试过两种方法,但都没有成功。更具体地说,在上面应用现有的重写规则是否会有问题?(在OP中)好的,当我评论我现有的规则时,上面的snippit是有效的(排印错误已经纠正)。如何使这两个条件兼容?@SpencerSharkey抱歉,已修复该类型。您的
/index.php
路由规则需要在条件中包含
框架
,并且需要遵循资产规则。我在另一个答案中看到了这一点,它几乎可以工作,但我不知道如何使其与我的原始规则兼容:(嗯,[L]flag表示,如果规则匹配,则不会处理进一步的规则。是否删除它并进行测试?
RewriteEngine on

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule /?assets/([^/]+) /framework/assets/$1 [L]

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule /?framework/assets/([^/]+) /assets/$1 [L]