2014-02-21 60 views
0

我想要做一個簡單的重定向,以便app/scans/large/as89q6dfa.jpg的請求導致app/scans/medium/as89q6dfa.jpg等。問題是該應用將用於具有不同基本路徑的幾個域。我試過的代碼不斷重寫到網站的絕對基本路徑,而應用程序實際上是網站深處的可變數量的文件夾。有沒有一種通用的方法來做這樣的重定向,而不需要對基本路徑進行硬編碼?通用.htaccess文件夾重定向與變量根路徑

這是我的文件和文件夾scructure:

app/.htaccess 
app/scans/large 
app/scans/medium 

所以的.htaccess規則應適用於:

includes/app/scans/large 
inc/app/scans/large 
script/engine/app/scans/large 

這是我第一次嘗試:

這裏是我的第二次嘗試:

RewriteEngine On 
RewriteBase/
RewriteRule ^scans/large/(.*) scans/medium/$1 [R=301,L] 

回答

0

當您使用「^」caracter時,這意味着正則表達式將在URL的BEGINNING中搜索字符串「scans/large」。因爲「base」是「/」,所以它不能在「includes/app/scans/large/omg」上工作,因爲「掃描」它不在字符串的開頭。

嘗試這種解決方案:

http://www.example.com/includes/app/scans/large/omg 

重定向到:

http://www.example.com/includes/app/scans/medium/omg 

你可以做更多的測試就在這裏:

RewriteEngine On 
RewriteBase/
RewriteRule (.*)scans/large/(.*) $1scans/medium/$2 [R=301,L] 

它與URL的工作完美link

+1

我的WAMP服務器也有其他問題(需要設置虛擬主機),現在已經修復。胡蘿蔔是關鍵和偉大的聯繫。它可以進一步簡化:重寫規則掃描/大/(.*)掃描/中/ $ 1 [R = 301,L] – skibulk

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] 
相關問題