【发布时间】:2013-08-16 06:26:03
【问题描述】:
我的项目中有 app 和 public 文件夹。我希望以 (css|im|js|lib)/ 开头的路径重定向到公用文件夹,以及其他任何内容 - 到 index.php 文件。
例如,http://mysite.com/css/s.css 应重定向到 SITE_ROOT/public/css/s.css,http://mysite.com/absde 应重定向到 SITE_ROOT/index.php
这是 nginx 的工作配置:
server {
listen 80;
server_name mysite.com;
root /home/mysite/html;
location ~ \/(css|im|js|lib)\/ {
root /home/mysite/html/public;
expires 30;
try_files $uri =404;
}
location {
rewrite ^(.*)$ /index.php break;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
现在我尝试为 apache 重写这个,我在 .htaccess 中写了类似的东西:
RewriteEngine On
RewriteRule ^(css|im|js|lib)\/(.*)$ public/$1/$2 [L]
RewriteRule . index.php [L]
这不起作用。似乎 RewriteRule 。 index.php 在第二行之前应用,以便所有内容都转到 index.php。但为什么?
如果我将第三行更改为
,则没有任何变化RewriteRule ^(.*)$ index.php [L]
这意味着方程的类型不会影响规则的顺序。
只有当我从第二行的正则表达式中删除 ^ 符号时,站点才会按预期开始工作。但我不想删除它!现在http://mysite.com/abcde/css/s.css 重写为css/s.css,不应该这样。如果我删除第三行,第二行也开始工作(这意味着它本身是正确的)。
这太简单了,但我在这三行中找不到错误。请帮忙。
【问题讨论】:
标签: apache .htaccess nginx apache2