2012-08-26 104 views
0

需要移動我的博客的位置,我試圖確保通過舊鏈接捕獲所有鏈接並將其重定向到新鏈接。重定向包含問號的網址

的博客已經從http://example.com/移到http://example.com/blog/

用於生成與我已經決定不這樣做後名(默認)之前的日期,保持網址難忘的URL。

問題是,有一個?字符的原始URL(由CMS生成我使用,它是造成與重定向問題的默認網址:?!

RewriteRule ^post.php?s=2012-01-01-blog-post$ /blog/blog-post? [R=301,L] 

所以我需要逃脫莫名其妙,但我不能工作,如何

我可以使用,避免了更廣泛的重定向,但會重定向到列表頁面,而不是物品本身:??

RewriteRule ^post.php$ http://tempertemper.net/blog/? [R=301,L] 

我如何讓閱讀爲URL的一部分!?

感謝您的參觀!

馬丁:)

回答

1

我認爲你需要使用的RewriteCond來檢查QUERY_STRING值的存在,然後,假設查詢字符串您的博客模式匹配,捕捉博客名稱,然後使用捕捉值在RewriteRule中。是這樣的:

RewriteCond ${QUERY_STRING} ^s=[0-9]{4}-[0-9]{2}-[0-9]{2}-(.*)$ 
RewriteRule ^post.php$ /blog/%1 [R=permanent,L] 

%1指的是在匹配的RewriteCond第一捕獲模式(以及重寫規則不會觸發,除非的RewriteCond匹配)。

這是必要的原因是RewriteRule無法將查詢字符串看作請求路徑的一部分,因此您必須在RewriteRule之前使用RewriteCond檢查(並捕獲)查詢字符串。

+1

您需要''1'末尾的'?',否則查詢字符串會被追加到末尾。 –

+0

我用%替換了$ {QUERY_STRING}之前的$,並使用了?正如@jon所建議的,它的工作原理!謝謝! – Martin

+0

@JonLin很好的電話。我忘記了將查詢字符串複製到目標URL。 – Bobulous