Php 如何使用mod_rewrite类似ln-s Unix创建虚拟文件夹

Php 如何使用mod_rewrite类似ln-s Unix创建虚拟文件夹,php,apache,unix,mod-rewrite,ln,Php,Apache,Unix,Mod Rewrite,Ln,以前使用命令ln创建虚拟文件夹 cd public ln -s ../app/assets/ assets ~ public > ls -l lrwxr-xr-x 1 carlosmontalvo admin 14 May 15 12:21 assets -> ../app/assets/ 但是我想用mod_重写 我试过了 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_

以前使用命令ln创建虚拟文件夹

cd public
ln -s ../app/assets/ assets

~ public > ls -l
lrwxr-xr-x  1 carlosmontalvo  admin   14 May 15 12:21 assets -> ../app/assets/
但是我想用mod_重写

我试过了

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?assets(.*) ../app/assets$1 [P] #here
RewriteRule ^(.*)$ index.php [QSA,L]
但这是行不通的

树目录

├── app
│    └─ assets
│       ├── images
│       ├── javascripts
│       │   └── application.js
│       └── stylesheets
│           └── application.css
├── public
│   ├── 404.html
│   ├── 422.html
│   ├── 500.html
│   ├── assets -> ../app/assets/
│   ├── index.php
│   └── robots.txt

你能帮我吗?谢谢

你不能。重写规则只能重写到
DocumentRoot
中的位置。你为什么要这么做?符号链接解决方案的开销较小,因此比重写规则解决方案更快。

您需要使用绝对路径

Alias /assets/ /www/app/assets/

<Directory "/www/app/assets/">
Require all granted
</Directory>

应该也能工作。

您从未见过使用符号链接的框架,所以我认为使用mod_(li3)的框架建议对资产使用符号链接。它有一个默认的内置路由器,让PHP为开发目的提供所请求的文件,但他们建议在生产环境中不要这样做,因为这是对PHP线程的浪费。
RewriteEngine On
RewriteCond /www/public/%{REQUEST_FILENAME} !-f
RewriteCond /www/public/%{REQUEST_FILENAME} !-d
RewriteRule ^/assets/(.*)$ /www/app/assets/$1 [L]