图片的友好URL

时间:2012-08-15 03:06:09

标签: image .htaccess url friendly-url

请建议我将哪些内容放入.htaccess文件。

我在服务器http://domain.tld/images/anyimage.anyextension

上有PNG,GIF,JPG图片

想要像http://domain.tld/anyimage.anyextension

那样使网址更加友好

我现在有了。前两个字符串如上所述更改链接。但是最后一个字符串不会为服务器更改它。

RewriteCond %{REQUEST_URI} ^/images/(.+)(\.gif|\.jpg|\.png)$ [NC]
RewriteRule ^image/(.+)$ /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.+)$ /images/$1 [L]

如果我添加

RewriteCond %{REQUEST_URI} ^/([^/.]+\.(png|gif|jpg))$ [NC]
RewriteCond %{DOCUMENT_ROOT}/image/%1 -f
RewriteRule ^([^/.]+\.(png|gif|jpg))$ /image/$1 [L,NC]

在上一个查询字符串规则之后,图像无法打开。如果之前没有问题。可能是什么?你知道如何解决它吗?最后一个字符串RewriteRule ^/?(.+)$ /?$1 [L]导致此冲突

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?([^\ ]+) [NC]
RewriteRule ^$ /%1? [R=301,L]
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+)$ /?$1 [L]

1 个答案:

答案 0 :(得分:1)

不确定如何使它更友好,除了它更短。您可以尝试将其添加到文档根目录中的htaccess文件中:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/([^/.]+\.(png|gif|jpg))$ [NC]
RewriteCond %{DOCUMENT_ROOT}/images/%1 -f
RewriteRule ^([^/.]+\.(png|gif|jpg))$ /images/$1 [L,NC]

然后,您可以将所有链接从http://domain.tld/images/anyimage.anyextension更改为http://domain.tld/anyimage.anyextension

第一个条件检查以确保请求是anyimage.anyextension,只要扩展名是不区分大小写的png,gif或jpg。

第二个条件检查以确保所请求的图像实际存在于/images/目录中。


RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /images/(.+)(\.gif|\.jpg|\.png) [NC]
RewriteRule ^image/(.+)$ /$1 [R=301,L]

这会将浏览器重定向到非/ image / URL。这里有两件完全不同的东西。一个处理浏览器,另一个处理服务器上的内容。请参阅this answer that explains how they are different的顶部。

您拥有的规则不起作用。第一:

RewriteRule ^/(.+)$ /images/$1 [L]

永远不会匹配。用于匹配htaccess文件中RewriteRule的正则表达式的URI删除了前导斜杠,因此没有URI将以/开头。你需要摆脱它。

其次,一旦这样做,您将得到500内部服务器错误,因为您的规则将导致内部无限循环。您需要与%{THE_REQUEST}匹配,以确保浏览器实际上请求其中包含/images/路径的网址,而不是内部重写的网址。