对于下面的示例,如果只有一个特定文件不存在,如何使用RewriteCond和RewriteRule,例如:
我有htps://a.b.com/sw.js,,如果它存在,那就什么也不做。如果htps://a.b.com/sw.js不存在,那么签入htps://a.b.com/folder1/sw.js,或htps://a.b.com/folder2/sw.js.如果它确实存在于htps://a.b.com/folder2/sw.js,中,那么将htps://a.b.com/sw.js重写为htps://a.b.com/folder2/sw.js
我只有:
RewriteCond https://a.b.com/sw.js # exist so do nothing
RewriteCond https://a.b.com/sw.js -f # does not exist
RewriteCond https://a.b.com/folder1/sw.js -f # check if it's in folder 1 (assume it's not)
RewriteCond https://a.b.com/folder2/sw.js -f # check if it's in folder 2 (assume it is)
RewriteRule https://a.b.com/sw.js shows code from https://a.b.com/folder2/sw.js发布于 2018-03-29 16:07:38
不确定你试图实施的是一个好的策略。猜测所请求的资源闻起来很不稳定。您确实应该在发送的引用以及您想要服务器或不想服务的请求方面做到具体。否则,您可能会遇到难以调试的各种奇怪问题,因为您从未真正了解资源之间的依赖关系。
无论如何,这里有一个重写方法的建议:
RewriteEngine on
RewriteCond %{REQUEST_URI} -f
RewriteRule ^ - [PT,END]
RewriteCond /folder1%/{REQUEST_URI} -f
RewriteRule ^/?(.+)/?$ /folder1/$1 [END]
RewriteCond /folder2%/{REQUEST_URI} -f
RewriteRule ^/?(.+)/?$ /folder2/$1 [END]如果使用此设置接收到http状态500,则很有可能操作一个非常旧版本的apache http服务器。在这种情况下,尝试用END标志替换L标志..。
还有一个一般性提示:您应该总是倾向于将这样的规则放置在http服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess样式文件)。众所周知,这些文件容易出错,很难调试,而且它们确实减慢了服务器的速度。只有当您无法控制主机配置(请阅读:真正便宜的主机服务提供商)或应用程序依赖于编写自己的重写规则(这显然是一场安全噩梦)时,它们才会被支持。
https://stackoverflow.com/questions/49560392
复制相似问题