我想做一个简单的重定向,以便app / scans / large / as89q6dfa.jpg的请求导致app / scans / medium / as89q6dfa.jpg等。麻烦的是这个应用程序将用于少数具有不同基本路径的域。我试过的代码不断重写到网站的绝对基本路径,而应用实际上是网站深处的可变数量的文件夹。是否有一种通用的方法来进行这样的重定向,而不对基本路径进行硬编码?
这是我的文件和文件夹结构:
app/.htaccess
app/scans/large
app/scans/medium
因此.htaccess规则适用于:
includes/app/scans/large
inc/app/scans/large
script/engine/app/scans/large
这是我的第一次尝试:
RedirectMatch 301 scans/large/(.*) scans/medium//$1
这是我的第二次尝试:
RewriteEngine On
RewriteBase /
RewriteRule ^scans/large/(.*) scans/medium/$1 [R=301,L]
答案 0 :(得分:0)
当您使用“^”字符时,表示正则表达式将在URL的 BEGINNING 中搜索字符串“scans / large”。
因为基数是“/”,所以它不适用于“includes / app / scans / large / omg”,因为“扫描”它不在字符串的开头。
试试这个解决方案:
RewriteEngine On
RewriteBase /
RewriteRule (.*)scans/large/(.*) $1scans/medium/$2 [R=301,L]
它与网址完美配合:
http://www.example.com/includes/app/scans/large/omg
重定向到:
http://www.example.com/includes/app/scans/medium/omg
您可以在此处对其进行更多测试:link
答案 1 :(得分:0)
您实际上可以动态确定RewriteBase
。
RewriteEngine On
# determine BASE dynamically
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteRule ^scans/large/(.*)$ %{ENV:BASE}scans/medium/$1 [R=301,L,NC]