我有这个apache重写规则:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} mycompany.com
RewriteRule ^$ http://mycompany.com/login [L]
# we check if the .html version is here (caching)
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
# no, so we redirect to our front web controller
RewriteRule ^(.*)$ index.php [QSA,L]
我唯一能理解的是,如果它是mycompany.com
,那么脚本将重定向到http://mycompany.com/login
。如果没有,那么......
我无法理解。
知道上面的剧本说的是什么?
答案 0 :(得分:1)
有趣的东西,不容易理解。 谷歌搜索代码中的评论文本给出了有趣的结果:http://www.google.com/search?q=%22%23+we+check+if+the+.html+version+is+here+%28caching%29%22
编辑:如果我们查看最后几行并知道Symfony使用缓存(它在URL显示的同一目录中创建扩展名为.html的本地文件),我可以尝试解释这里的行
如果请求的网址类似于http://yoursite.com/blabla/,我们会尝试在该目录中打开index.html文件。如果文件不存在,则会发生另一个重写循环,最后一个Cond将被命中(文件不存在)
RewriteRule ^$ index.html [QSA]
如果网址中有更多内容,例如http://yoursite.com/blabla/blblbl,请尝试查找文件blblbl.html
RewriteRule ^([^.]+)$ $1.html [QSA]
这是所有网址的收集器,它们与之前的任何规则都不匹配,或者缓存的文件不存在:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]