我最近尝试将一些图像的HTTP请求卸载到CDN(使用S3)。
我的cdn位于s3.mydomain.com
一旦我添加了媒体服务器,一切看起来都不错(css,javascript)。但是,有一个问题。我的所有产品图片都缺少图片。
我尝试了以下内容:
启用“友好网址”的完整网址为: http://xx.bro.do/2579-product_list_default/langdon-parka-black.jpg(不工作)
关闭“友好网址”后,它会变为: http://xx.bro.do/img/p/2/5/7/9/2579-product_list_default.jpg
所以,某种方式“友情网址”没有被正确地重定向到“不友好的网址”
以下是我的.htaccess的片段
# Images
RewriteCond %{HTTP_HOST} ^xx.bro.do$ [OR]
RewriteCond %{HTTP_HOST} ^brodo.dev$
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L]
RewriteCond %{HTTP_HOST} ^xx.bro.do$ [OR]
RewriteCond %{HTTP_HOST} ^brodo.dev$
RewriteRule ^([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$1$2$3$4.jpg [L]
RewriteCond %{HTTP_HOST} ^xx.bro.do$ [OR]
RewriteCond %{HTTP_HOST} ^brodo.dev$
RewriteRule ^([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$1$2$3$4$5.jpg [L]
RewriteCond %{HTTP_HOST} ^xx.bro.do$ [OR]
RewriteCond %{HTTP_HOST} ^brodo.dev$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg [L]
RewriteCond %{HTTP_HOST} ^xx.bro.do$ [OR]
RewriteCond %{HTTP_HOST} ^brodo.dev$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg [L]
RewriteCond %{HTTP_HOST} ^xx.bro.do$ [OR]
RewriteCond %{HTTP_HOST} ^brodo.dev$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg [L]
RewriteCond %{HTTP_HOST} ^xx.bro.do$ [OR]
RewriteCond %{HTTP_HOST} ^brodo.dev$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg [L]
RewriteCond %{HTTP_HOST} ^xx.bro.do$ [OR]
RewriteCond %{HTTP_HOST} ^brodo.dev$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg [L]
100%工作的另一个解决方案是更改以下文件的实际代码:
这最后的努力,我试图避免仅因为模板将来发生变化,然后有人将不得不重新重做工作。
所以有人知道如何解决这个问题吗?我感谢任何帮助。
答案 0 :(得分:2)
这种方法适合我。
第1步:启用友好网址。没有媒体服务器检查一切正常。确保已启用友好且已禁用媒体服务器
当第1步工作时,您会看到您的产品的网址为 的 http://ec2.aws.XXXXXXXXX.com/1-large_default/faded-short-sleeves-tshirt.jpg 强>
第2步:立即启用媒体服务器。我使用 cloudfront as cdn 和 s3作为存储桶
启用媒体服务器时
你会遇到两个场景
1.css和js不会加载甚至图像都不会加载
2.images将加载,但css和js不会加载
修复此问题:goto 高级参数 - > 表现 - > CCC(结合压缩和缓存)
CSS智能缓存 - 如果是,请选择否。
JavaScript智能缓存 - 如果是,请选择否。
重新加载页面后。该网站似乎很好..
但在此阶段您可能会遇到另外2个场景
1.css,js,图片都已正确加载,但产品图片无法加载。
2.一切正常加载,您的网站很好用。没有任何进一步的改变。
如果你反击第一种情况,请按照以下步骤操作。
第1步。打开您的ftp客户端并导航到您的apache文件夹 通常它将驻留在rootofserver / etc / apache /
中 in my case it is rootofserver/etc/httpd
在你的情况下,它可能是相同的,也可能是
rootofserver/etc/apahce/
or rootofserver/etc/apahce2/
第2步。一旦你的文件夹内部打开httpd.conf文件,你可以在任何编辑器中使用..
再次在我的情况下
its httpd.conf it might be same or it will be
apaceh2.conf or apache.conf
第3步。一旦你在任何文本编辑器中打开文件
找到以下这些行, Allowoverride 将其设置为全部,如果没有。(确保'a'是大写)
DocumentRoot "/var/www/html"
#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
接下来找到这些行并将 Allowoverride设置为All(确保'a'为Capital)
<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
完成此文件的编辑后,将其上传回服务器,或者如果可以将其保存在服务器中,请执行此操作。上传回服务器后,请确保再次检查此文件。如果已经编辑了更改。如果没有打开 putty 或任何命令行工具你的使用和设置
chmod 0666 to the file
命令是
"sudo chmod 0666 /etc/httpd/httpd.conf"
复制粘贴并按命令行界面输入。确保文件名与服务器中的一样。以及路线。
如果即使在所有这些更改后,您的产品图片仍未加载
转到 cdn控制台并将来源设置为您自己的网络服务器。不要使用s3桶。
如果站点域名(开发时)可能
ec2.userxxxxxxxx.aws.com (if amazon ec2)
或任何其他服务,如果您使用 提供该名称作为您的cdn的来源。因为这将使您的服务器和作为s3存储桶的cdn之间的文件保持同步 你必须手动更新你的网站的主副本。(有方法实现s3和服务器之间的同步,但我还没有尝试过)
按照以下步骤进行操作,这可能会让您的网站正常运行..这对我来说非常棒,而且该网站现在已经启用了网址和媒体服务器。