0
我遇到了一些mod_rewrite问题。我的目录结构(的一部分)是:mod_rewrite前缀问题
index.php
.htaccess
app
controllers
models
views
...
public
javascripts
stylesheets
foo
bar
所以,你可以看到,所有静态文件是在app /公众。这就是我想的路线一样请求的原因:
http://www.example.com/images/logo.png => app/public/images/logo.png
http://www.example.com/javascripts/app.js => app/public/javascripts/app.js
http://www.example.com/uploads/blog/something => app/public/uploads/blog/something
如果这个文件不存在,那么它应该路由到index.php,如:
http://www.example.com/news/show/42 => index.php
(Because file app/public/news doens't exist)
所以,这是我目前的.htaccess,但我认为它可以用更优雅的方式完成。
RewriteEngine on
RewriteRule (png|jpg|gif|bmp|ico)$ app/public/images/$1/$2.$3 [L]
RewriteRule ([^/.]+).js$ app/public/javascripts/$1.js [L]
RewriteRule ([^/.]+).css$ app/public/stylesheets/$1.css [L]
RewriteRule ^(.*)$ index.php [NC,L,QSA]
此外,这个问题是,它只处理图像,JavaScript和样式表,但不是所有其他文件。
我知道有:
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
但是,我不知道用前缀“应用程序/公/”如何路由呢?我试过了:
RewriteCond app/public/%{SCRIPT_FILENAME} !-f
RewriteCond app/public/%{SCRIPT_FILENAME} !-d
但它不起作用!我也尝试使用RewriteBase,但它没有解决。
编辑:
我使用指定mod_expires,我真的很想自动化喜欢请求:
http://www.example.com/images/logo.42.png => app/public/images/logo.png
http://www.example.com/javascripts/app.42.js => app/public/javascripts/app.js
所以,你可以看到,我想有文件名和扩展名之间的可选号码,并且该数字应该被忽略(仅用于将来到期)。
以前,我发现:
RewriteRule ^(.*)\.(\d+)(_m_\d+)?\.([^\.]+)$ $1.$4 [QSA]
但我实在不明白它是如何工作的?它总是在我的例子(也许多个扩展名)工作?
谢谢!
我得到500,并在重写日志,它看起来像他得到了在不定式循环。但我不明白为什么,[L]应该是最后一个,对吗? 另外,如果我理解的很好,您将所有内容重定向到app/public,对吧?怎么样index.php部分?对不起,如果我理解错了! – mfolnovich 2010-08-08 18:35:50
@mfolnovich对不起,我没有粘贴其他的文件 – Aillyn 2010-08-08 18:39:50
嘿,tnx为您的答案。现在,它似乎对静态文件的工作,但: 1.空路径,它会显示应用程序/公共 2.真正的需求,它崩溃和日志,它说: 脚本“在/ var/WWW /项目/ petasite /应用程序/公共/ index.php'未找到或无法统计,我试图把../../index.php?url=$1,但它造成500. 编辑:无法弄清楚如何在评论中添加换行符:S – mfolnovich 2010-08-08 18:45:10