2012-08-01 72 views
3

我有一系列圖像,我想重新命名爲SEO目的。但是,我有超過6,000張圖像,所以我認爲必須對我的.htaccess文件進行簡單的重寫。基於.htaccess文件中的模式顯示某個圖像

當前圖像使用下面的模式,目前命名爲:

http://www.mydomain.com/images/small/00005712.jpg

http://www.mydomain.com/images/medium/00005712.jpg

http://www.mydomain.com/images/large/00005712.jpg

我希望能夠給他們打電話了命名方案,例如:

http://www.mydomain.com/5712s-keyword-phrase.jpg

http://www.mydomain.com/5712m-keyword-phrase.jpg

http://www.mydomain.com/5712l-keyword-phrase.jpg

這將讓我從改變顯示:

<img src="http://www.mydomain.com/images/large/00005712.jpg" /> 

<img src="http://www.mydomain.com/5712l-keyword-phrase.jpg" /> 

重寫將有希望讓我簡單地改變格局在我的PHP文件中的img src屬性。使用新名稱跨整個網站的img src屬性實際上將原始圖像呈現在屏幕上。

所有的文件名都有8位數字的數字名稱,在左邊填充0。

另請注意,如果您知道使用左側的關鍵字短語和數字結束的方式執行此操作的方式,例如http://www.mydomain.com/keyword-phrase-5712s.jpg,它會更好。

如果我沒有提供足夠的細節,請讓我知道我能做些什麼來澄清。任何有關這個問題的幫助將不勝感激。

+0

重寫將不會更改您已經硬編碼到您的代碼中的任何URL(無論是HTML頁面還是css url())。重新命名所有圖像可能是最好的。 – 2012-08-01 05:40:28

+0

我已經更新了這個問題,以包括我可以在一個文件中重新編碼所有6000多個圖像的src屬性的事實,因爲它使用數據庫來組織它們。我所要做的就是改變1行代碼中的模式,並且都將指向新的命名模式。 – 2012-08-01 05:42:50

+0

難道你不能使用相同的PHP系統來重命名圖像並在命令行上運行它嗎? – 2012-08-01 05:43:57

回答

1

如果重命名文件夾,SM和L您可以使用1規則集

RewriteCond %{REQUEST_URI} (.*)\.jpg$ 
RewriteRule ^0*([1-9])(\d*)(s|m|l)(.*)$ /images/$3/$1$2.jpg 

否則需要3

RewriteCond %{REQUEST_URI} (.*)\.jpg$ 
RewriteRule ^0*([1-9])(\d*)s(.*)$ /images/small/$1$2.jpg 

RewriteCond %{REQUEST_URI} (.*)\.jpg$ 
RewriteRule ^0*([1-9])(\d*)m(.*)$ /images/medium/$1$2.jpg 

RewriteCond %{REQUEST_URI} (.*)\.jpg$ 
RewriteRule ^0*([1-9])(\d*)l(.*)$ /images/large/$1$2.jpg 

編輯

每下面的評論,扔掉的文件名前面的SEO而言,使用:

RewriteRule ^.*(\d+)s\.(jpg|gif|png)$ /images/small/$1.$2 
RewriteRule ^.*(\d+)m\.(jpg|gif|png)$ /images/medium/$1.$2 
RewriteRule ^.*(\d+)l\.(jpg|gif|png)$ /images/large/$1.$2 

的*開頭扔掉圖像位之前的任何前導字符。由於現在文件url中包含前導零,因此我們可以使用(\ d +)匹配(s | m | l)文件夾指示符之前的一個或多個數字和圖像文件擴展名。

+0

'^ 0 *([1-9]) (\ d *)l(。*)$'表示匹配任意數量的0,一個數字「1-9」,然後是任意數量的數字。所請求的URL沒有前導0的 – Brombomb 2012-08-01 06:08:53

+0

這是真的,它會將前導零添加到目標文件以將其填充到8位數。不知道你可以在正則表達式中做到這一點,我不認爲有任何strlen或數字格式化選項 – WebChemist 2012-08-01 06:10:58

+0

整個事情真的是一個巨大的浪費(像許多SEO實踐)。即使Google確實將動態生成的關鍵字與圖片相關聯,它也會將圖片視爲其他關鍵字的重複內容。如果重複的圖像是重複頁面的任何東西,第二到第n個變化將被忽略,甚至可能會導致懲罰,如果他們認爲你試圖以某種方式遊戲系統... – WebChemist 2012-08-01 06:13:44

0

您需要確保國防部重寫安裝,和你的服務器上啓用:

RewriteEngine On 
RewriteRule *(\d{8})l\.(gif|jpg|png)$ /images/large/$1.jpg 
RewriteRule *(\d{8})s\.(gif|jpg|png)$ /images/small/$1.jpg 
RewriteRule *(\d{8})m\.(gif|jpg|png)$ /images/medium/$1.jpg 

未經測試,我會丟幾個編輯得到它如此。

* - 匹配任何前導字符的URL

(\d{8}) - 匹配一組8位

l - 匹配large

\. - 匹配一個.

(gif|jpg|png) - 匹配gifjpgpng

$ - 匹配URL的結束

把它放在一起:

比賽形式的任何要求(這是您要求的 「更好」 的解決方案)

http://www.mydomain.com/keyword-phrase-{ANY 8 DIGITS}.gif

http://www.mydomain.com/keyword-phrase-{ANY 8 DIGITS}.jpg

http://www.mydomain.com/keyword-phrase-{ANY 8 DIGITS}.png

注意

礦井缺少填充填充前導0的所以你必須在前面包括空的0。

+0

不會放棄前導零,但...需要像(0 *)([1-9])(\ d *) - > drop $ 1 use $ 2 $ 3 – WebChemist 2012-08-01 05:59:58

+0

好的通話,我以爲他想保持領先的0。爲什麼3位數匹配組通過? – Brombomb 2012-08-01 06:01:12

+0

是的,我剛剛意識到第一個匹配組發佈0 *([1-9])(\ d *) - >使用$ 1 $ 2將是相同的事情 – WebChemist 2012-08-01 06:04:08

0

您可以在服務器中創建一個符號鏈接,將其重寫爲原始路徑。

供您參考link