2012-08-29 32 views
0

我想重定向域名上的舊asp頁面,以便它們鏈接到CakePHP版本(使用1.3)上各自的頁面。域名是一樣的。這些重定向正在添加,因此搜索引擎中的結果會轉到新的Cake頁面。CakePHP 301重定向附加額外的查詢字符串參數

我在/.htaccess文件中有一堆重定向301(app/.htaccess和app/webroot/.htaccess是默認的)。

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 

    Redirect 301 /contacts.asp http://domain/contacts 
    Redirect 301 /users.asp http://domain/users 
</IfModule> 

但由於某些原因,當我去到任何URL的測試重定向,它附加一個額外的查詢字符串參數。例如:

要:http://domain/contacts.asp結果http://domain/contacts?url=contacts.asp

所以重定向工作,但它被追加url查詢字符串參數。我不想完全刪除所有的查詢字符串參數,因爲一些舊的ASP鏈接具有查詢字符串參數,我也想傳遞給相應的Cake頁面。

我相信「URL」查詢字符串參數從app/webroot/.htaccess文件來所見:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule> 

需要注意的是,當我把我的301重定向到我的虛擬主機文件,該url參數不附加。我想保留所有這些重定向到我的.htaccess文件中。我怎樣才能防止這個url查詢字符串參數被追加?

回答

1

這看起來像是一個mod_rewrite和mod_alias跨越彼此的情況。當應用Redirect指令時,URI處理管道不會結束,它將繼續通過管道,並且mod_rewrite完成它的工作。不幸的是,最終的結果並不總是你想要的。你可以堅持使用mod_rewrite並刪除Redirect指令。

可以刪除2個Redirect指令並添加這些2 RewriteRule小號上述該請求映射到app/webroot的那些:您的答覆

RewriteRule ^contacts\.asp$ http://domain/contacts [L,R=301] 
RewriteRule ^users\.asp$ http://domain/users [L,R=301] 
+0

謝謝。我想我明白你在說什麼。將'重寫規則^聯繫人\ .asp $ http:// domain/contacts [L,R = 301]'保持參數完好?例如,將http://domain/contacts.asp?contact = x重定向到http:// domain/contacts?contact = x'?另外,關於'Reddirect'指令方法,有什麼方法可以將它們移動到那些.htaccess文件中,以便它們是最後一個被評估的? –

+1

@penguinegg是的,現有的查詢字符串會自動追加。不,移動'Redirect'語句不會影響任何東西,因爲它們是2個不同的模塊。一個模塊運行並完成它的工作,然後另一個模塊運行並執行它,然後最終獲得一個URI和一個重定向。 –

+0

如果我想在應用程序的不同位置指定不同的參數集,它會變得更加複雜嗎?以下僅僅是一個例子(所以url結構可能沒有意義)。假設我想直接將'http://domain/contacts.asp?group=A&add=1'設置爲'http:// domain/contacts/A/1'和'http://domain/contacts.asp?group = B&admin = 0'到'http:// domain/contacts/B/0',但我仍然希望'http:// domain/contacts.asp'重定向到'http:// domain/contacts'(保留任何隨機參數如contacts.asp?view =全部完整)。我將如何修改上述? –

相關問題