2012-08-01 70 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