Apache mod_rewrite使所有目录/子目录中的目录可用
我想链接一个目录,如:Apache mod_rewrite使所有目录/子目录中的目录可用,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我想链接一个目录,如: /resources/IMG/ 到所有其他目录,如 /IMG/ would resolve to /resources/IMG/ 而且 /foo/IMG/bar/anything.img should resolve to /resources/IMG/bar/anything.img 使用.htaccess。我已经测试了几种方法,哪种方法最有效 编辑:解决方案 # Add trailing slash to any directory if not done so
/resources/IMG/
到所有其他目录,如
/IMG/ would resolve to /resources/IMG/
而且
/foo/IMG/bar/anything.img should resolve to /resources/IMG/bar/anything.img
使用.htaccess。我已经测试了几种方法,哪种方法最有效
编辑:解决方案
# Add trailing slash to any directory if not done so
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
# MAP /resources/IMG/ to be avaible as /IMG/ from everywhere
RewriteCond %{REQUEST_URI} !^/resources/IMG/
RewriteRule ^(?:.*/IMG/)(.*)$ /resources/IMG/$1 [L]
处理/IMG(不带尾随斜杠)的最佳方法是首先映射它,然后添加斜杠,但由于它是301重定向,它将刷新请求的\u URI,url将为/resources/IMG/但如果总是添加尾随斜杠,它应该可以正常工作。您可以使用此规则作为第一条规则:
DirectorySlash Off
# Add trailing slash to any directory if not done so
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
RewriteCond %{REQUEST_URI} !^/resources/IMG [NC]
RewriteRule ^(?:.*?/)?(IMG(?:/.*)?)$ /resources/$1 [L,NC]
经过测试,似乎根本不起作用。我用/web/IMG/试过了,但我得到了一个“未找到”(404)命令,请确保这是您在.htaccess中的第一条规则。您可以将当前的.htaccess放在您的问题中。感谢您的帮助,我对当前代码做了一些更改,我感谢您的帮助,感谢您在
行的重写引擎下方插入我的建议规则。我测试了当前代码,并在重写引擎打开后立即将其放入,但很遗憾,这会导致重定向循环,您知道出了什么问题吗?