2012-04-24 37 views
0

我不是mod_rewrite的或正則表達式不太好,但我需要最終使用301重定向一個網站,我感動。舊網站的結構是這樣方向與Apache的mod_rewrite

http://www.mywebsite.com/FF_Supersneaker_Black_Metallica_p/155-157.htm

和相同產品的新網站是如此

https://www.mywebsite.com/FF_Supersneaker_Black_Metallica_p.html

,我需要做的是提取物和去除「/ 155-157" 和改擴建爲.html代替的.htm

所以從邏輯上講,我想我需要找到的最後出現的‘/’和最後出現了「」。並將其中的所有內容的值改爲「」。那麼文件擴展名的變化無處不在互聯網上,但我不知道如何將它與其餘的內容結合起來。

編輯: 這裏是我的.htaccess文件:

<IfModule mod_rewrite.c> 
RewriteEngine On  
RewriteRule /(.*)/(.*)/[^/]*.htm$ /$1$2.html 
</IfModule> 

這裏是我的rewritelog當我試圖用它的相關條目。 (我只是改變了IP和域名。我用尾巴和複製的彈出當我試圖去到頁面的條目。

255.255.255.255 - - [25/Apr/2012:11:57:24 --0400] [www.mywebsite.com/sid#9b25ed8][rid#9e3cc48/initial] (1) [perdir /var/www/test/] pass through /var/www/test/FF_Supersneaker_Black_Metallica_p/155-157.htm 

我添加的額外/(.*),因爲有一個額外的目錄我的測試頁面上。該結構是 http://www.mywebsite.com/test/FF_Supersneaker_Black_Metallica_p/155-157.htm 重定向到 http://www.mywebsite.com/test/FF_Supersneaker_Black_Metallica_p.html

對不起,問這麼多問題,也只能啓用重寫日誌買去到的apache.conf或httpd.conf文件的文件並重新啓動服務器,對不對?如果是這樣的話我沒有權限。

回答

1

所有你在這裏做的是剝離的最後一個路徑組件,然後加名「.html」。因此,也許是這樣的:

RewriteRule /(.*)/[^/]*.htm$ /$1.html 

序列[^/]意味着「任何字符不是/」,並*意思是「以前的模式0次以上」,所以[^/]*.htm比賽非/字符,隨後的任意字符串.htm在字符串的末尾。我們放棄這些,使用其他所有內容,並添加.html

URL Rewriting Guide有很多的信息和示例。

+0

什麼是部分 「(。*)」 是什麼意思?是隻針對.com和.net和.edu等?我不認爲這是它所做的,但它是我能想出的唯一想法。由於 – 2012-04-24 16:39:27

+0

的'/(.*)'捕獲(這是'()'一樣)比一切最後一個路徑組件別的其他並將其分配到'$ 1' ......這樣我們就可以在右擊手邊使用的規則。 – larsks 2012-04-24 16:42:33

+0

等一下,查找除換行符以外的任何字符0次或更多次,對不對?現在這兩個被斜線包圍/(。*)/ [^ /] *。htm $/$ 1.html在那裏有什麼目的?我知道搜索和替換,但通常不會以s爲前綴?此外,$ 1.html中的$ 1是否僅僅表示採用前一個結果並將.html附加到它? – 2012-04-24 16:46:29