我在index.php中有一个调度函数,所以URL如:
/ blog/show转到
/index.php/blog/show
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
我如何修改它,以便我可以将所有静态文件转储到公共目录中,但在URL中不公开访问它们.
例如/docs/lolcats.pdf访问
驱动器上的/public/docs/lolcats.pdf
我试过这个
RewriteCond %{REQUEST_FILENAME} !f RewriteRule ^(.*)$ public/$1 [QSA,L]
Gumbo.. 14
试试这个:
RewriteCond %{DOCUMENT_ROOT}public%{REQUEST_URI} -f RewriteRule !^public/ public%{REQUEST_URI} [L]
如果要在根目录下的子目录中使用它:
RewriteCond %{REQUEST_URI} ^/subdir(/.*) RewriteCond %{DOCUMENT_ROOT}subdir/public%1 -f RewriteRule !^public/ public%1 [L]
我找到了另一个没有明确命名子目录的解决方案:
RewriteRule ^public/ - [L] RewriteCond public/$0 -F RewriteRule .* public/$0 [L]
重要的变化是使用-F
而不是-f
前者触发子请求.
试试这个:
RewriteCond %{DOCUMENT_ROOT}public%{REQUEST_URI} -f RewriteRule !^public/ public%{REQUEST_URI} [L]
如果要在根目录下的子目录中使用它:
RewriteCond %{REQUEST_URI} ^/subdir(/.*) RewriteCond %{DOCUMENT_ROOT}subdir/public%1 -f RewriteRule !^public/ public%1 [L]
我找到了另一个没有明确命名子目录的解决方案:
RewriteRule ^public/ - [L] RewriteCond public/$0 -F RewriteRule .* public/$0 [L]
重要的变化是使用-F
而不是-f
前者触发子请求.