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


How to create virtual folder with mod_rewrite similar ln -s Unix

之前使用命令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_rewrite

我用

测试
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

可以帮我吗?由于

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

你需要使用绝对路径。

Alias /assets/ /www/app/assets/
<Directory "/www/app/assets/">
Require all granted
</Directory>
如果Apache可以访问这些文件,

应该可以工作。

没有理由使用mod_rewrite,但是:

RewriteEngine On
RewriteCond /www/public/%{REQUEST_FILENAME} !-f
RewriteCond /www/public/%{REQUEST_FILENAME} !-d
RewriteRule ^/assets/(.*)$ /www/app/assets/$1 [L]

也可以