1

请建议我将什么放入.htaccess文件中。

我在服务器上有 PNG、GIF、JPG 图像http://domain.tld/images/anyimage.anyextension

想让 URL 像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]
4

1 回答 1

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.anyextensionhttp://domain.tld/anyimage.anyextension

第一个条件检查以确保请求是 for 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。这里发生了两件完全不同的事情。一个处理浏览器,另一个处理服务器上的内容。请参阅此答案的顶部,该部分解释了它们的不同之处。

你的规则是行不通的。第一的:

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

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

其次,一旦你这样做,你会得到一个 500 内部服务器错误,因为你的规则会导致内部无限循环。您需要进行匹配%{THE_REQUEST}以确保浏览器实际请求的是带有/images/路径的 URL,而不是内部重写的 URL。

于 2012-08-15T04:06:43.650 回答