如何解决.htaccess将具有特定路径的文件重定向到另一个目录
| 这似乎有点基本,并且在这里被问了很多东西,但是我有一个小的.htaccess问题(mod_rewrite)。 我正在为PHP开发MVC框架(就像其他人一样...),所有流量都通过index.php,然后路由到所需的控制器和方法。一切顺利。结构大致如下: 应用 控制器 楷模 意见 快取 构架 上市 资产 img 的CSS js index.php .htaccess 对于myapp.com/css/之类的URL,我需要o加载CSS控制器index函数。但是对于像myapp.com/css/style.css这样的URL,我需要从public / css /目录中获取文件 我不愿意为要包含的每个文件编写/ public /,所以基本上我需要将所有流量重定向到/ public /(如果它是实际文件),并保留所有其他URL的正常重写规则。我计划在生产中使用它,让前端开发人员以通常的方式进行处理,然后将粘贴的内容复制到适当的位置(通过CSS修改路径等)就容易得多。 我想出了这个:RewriteEngine on
RewriteRule ^(img|css|js|assets)/(.*).([a-z]{3})$ public/$1/$2 [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
但是它有一些明显的缺陷。我不介意在第一个正则表达式中设置目录,但是按照我的方式检查路径是否是文件似乎不太可靠。使用RewriteCond来检查它是否由于某种原因而无法正常工作,我认为对于myapp.com/img/this-is-actually-an-article.aaa之类的URL,此方法可能会失败长度也不得超过3个字符,我还需要检查该字符是否安全。
最好的方法是什么?你们通常如何做?还是从一开始就是错误的方法?
解决方法
-f
不起作用,因为请求的文件是/css/style.css
,而磁盘上的文件是/public/css/style.css
。
我认为声明一些您无法在应用程序中使用的预定义名称空间(如img,css,js,资产)没有问题。
最终,我认为您将进入一种情况,即您框架的插件不再能够确定其资源在哪里,框架应该为它们决定资源,甚至可能为它们加载资源。这解决了您当前所有的问题,因为没有插件代码将不需要了解任何有关URL的信息。无论您采用哪种重写策略,我都希望这样做。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。