请建议我将哪些内容放入.htaccess
文件。
我在服务器http://domain.tld/images/anyimage.anyextension
想要像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]
答案 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/
路径的网址,而不是内部重写的网址。