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

时间:2013-05-16 01:22:57

标签: 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_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

可以帮到我吗?感谢

2 个答案:

答案 0 :(得分:0)

你做不到。 RewriteRules只能重写DocumentRoot内的位置。你为什么要这样做呢?符号链接解决方案具有较少的开销,因此比RewriteRule解决方案更快。

答案 1 :(得分:0)

您需要使用绝对路径。

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]

应该也可以。