我有以下mod重写规则:
RewriteCond %{DOCUMENT_ROOT}/../application/%{REQUEST_URI} -f
RewriteRule ([\w]+\/www\/(.*)) %{DOCUMENT_ROOT}/../../application/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ ./index.php/$1
我的服务器目录布局如下:
/application
--/example
----/www
------/test.jpg
/www <- public root
--/.htaccess
--/index.php
基本上,我们的想法是,您可以像这样访问index.php:
example.com/test/paths/ < would pass test/paths/ to index.php
example.com/example/www/test.png < would pass example/www/test.png to index.php
example.com/example/www/test.jpg < would output the contents of test.jpg
现在前两个例子完美无缺。当我们到达最后一个输出test.jpg(在非公共目录中)的内容的例子时,我得到了这个错误:
您无权访问此服务器上的/C:/web/git/framework/application/example/www/test.jpg。
我可以将它传递给另一个公共php文件,然后只需要执行私有文件的file_get_contents并以这种方式显示它,但我理想情况下不想产生额外的php进程。无论如何,如果没有拒绝访问的部分,我可以做我想做的事情吗?
修改
我通过不同的方式解决了问题。我将整个应用程序目录移动到www目录中,现在我使用这个HT ACCESS文件只加载\ w / www / *目录中的文件
RewriteCond %{REQUEST_URI} ^/[\w]+/www/(.*)$
RewriteCond %{DOCUMENT_ROOT}/applications/%{REQUEST_URI} -f
RewriteRule ([\w]+\/www\/(.*)) /applications/$1 [L]
RewriteCond %{REQUEST_URI} !^/index.php/.*
RewriteRule ^(.*)$ ./index.php/$1
答案 0 :(得分:1)
我通过不同的方式解决了问题。我将整个应用程序目录移动到www目录中,现在我使用这个HT ACCESS文件只加载\ w / www / *目录中的文件
RewriteCond %{REQUEST_URI} ^/[\w]+/www/(.*)$
RewriteCond %{DOCUMENT_ROOT}/applications/%{REQUEST_URI} -f
RewriteRule ([\w]+\/www\/(.*)) /applications/$1 [L]
RewriteCond %{REQUEST_URI} !^/index.php/.*
RewriteRule ^(.*)$ ./index.php/$1