具有可变根路径的通用.htaccess文件夹重定向

时间:2014-02-21 19:44:07

标签: .htaccess redirect

我想做一个简单的重定向,以便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]

2 个答案:

答案 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]