目前我们正在使用GTranslate来翻译我们的WordPress网站。
它有一个插件,可以将以下规则添加到.htaccess:
### BEGIN GTranslate config ###
RewriteRule ^(af|sq|am|ar|hy|az|eu|be|bn|bs|bg|ca|ceb|ny|zh-CN|zh-TW|co|hr|cs|da|nl|en|eo|et|tl|fi|fr|fy|gl|ka|de|el|gu|ht|ha|haw|iw|hi|hmn|hu|is|ig|id|ga|it|ja|jw|kn|kk|km|ko|ku|ky|lo|la|lv|lt|lb|mk|mg|ms|ml|mt|mi|mr|mn|my|ne|no|ps|fa|pl|pt|pa|ro|ru|sm|gd|sr|st|sn|sd|si|sk|sl|so|es|su|sw|sv|tg|ta|te|th|tr|uk|ur|uz|vi|cy|xh|yi|yo|zu)/(af|sq|am|ar|hy|az|eu|be|bn|bs|bg|ca|ceb|ny|zh-CN|zh-TW|co|hr|cs|da|nl|en|eo|et|tl|fi|fr|fy|gl|ka|de|el|gu|ht|ha|haw|iw|hi|hmn|hu|is|ig|id|ga|it|ja|jw|kn|kk|km|ko|ku|ky|lo|la|lv|lt|lb|mk|mg|ms|ml|mt|mi|mr|mn|my|ne|no|ps|fa|pl|pt|pa|ro|ru|sm|gd|sr|st|sn|sd|si|sk|sl|so|es|su|sw|sv|tg|ta|te|th|tr|uk|ur|uz|vi|cy|xh|yi|yo|zu)/(.*)$ /$1/$3 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(af|sq|am|ar|hy|az|eu|be|bn|bs|bg|ca|ceb|ny|zh-CN|zh-TW|co|hr|cs|da|nl|en|eo|et|tl|fi|fr|fy|gl|ka|de|el|gu|ht|ha|haw|iw|hi|hmn|hu|is|ig|id|ga|it|ja|jw|kn|kk|km|ko|ku|ky|lo|la|lv|lt|lb|mk|mg|ms|ml|mt|mi|mr|mn|my|ne|no|ps|fa|pl|pt|pa|ro|ru|sm|gd|sr|st|sn|sd|si|sk|sl|so|es|su|sw|sv|tg|ta|te|th|tr|uk|ur|uz|vi|cy|xh|yi|yo|zu)/(.*)$ /wp-content/plugins/gtranslate/url_addon/gtranslate.php?glang=$1&gurl=$2 [L,QSA]
RewriteRule ^(af|sq|am|ar|hy|az|eu|be|bn|bs|bg|ca|ceb|ny|zh-CN|zh-TW|co|hr|cs|da|nl|en|eo|et|tl|fi|fr|fy|gl|ka|de|el|gu|ht|ha|haw|iw|hi|hmn|hu|is|ig|id|ga|it|ja|jw|kn|kk|km|ko|ku|ky|lo|la|lv|lt|lb|mk|mg|ms|ml|mt|mi|mr|mn|my|ne|no|ps|fa|pl|pt|pa|ro|ru|sm|gd|sr|st|sn|sd|si|sk|sl|so|es|su|sw|sv|tg|ta|te|th|tr|uk|ur|uz|vi|cy|xh|yi|yo|zu)$ /$1/ [R=301,L]
### END GTranslate config ###
我检查了一下,似乎代码只是重写了多语言URL,如https://www.example.com/de/到https://www.example.com/wp-content/plugins/gtranslate/url_addon/gtranslate.php?glang=de&gurl=https://www.example.com
然后gtranslate.php将联系GTranslate服务器进行翻译并返回翻译后的页面,下面是响应头:
但是,有时GTranslate服务器会返回空白页。在这种情况下,在响应头中,x-gt字段将全部丢失,如下所示:
由于我们的网站使用Cloudflare,我们希望在.htaccess中添加一个规则,以便在响应头不包含x-gt字段时不缓存翻译的页面,如下所示:
Header set CDN-Cache-Control "no-cache, must-revalidate, max-age=0" "xxx"
Header set Cloudflare-CDN-Cache-Control "no-cache, must-revalidate, max-age=0" "xxx"
但我不知道如何编写条件的情况下,当x-gt字段丢失
1条答案
按热度按时间ilmyapht1#
我不认为
.htaccess
file可以直接与传出的HTTP响应交互,特别是那些由外部服务器(如GTranslate)生成的响应。这意味着你不能在
.htaccess
中根据GTranslate的响应头有条件地设置一个头。你需要一个服务器端代码。您可以使用WordPress钩子来检查来自GTranslate的HTTP响应,并根据
x-gt
字段是否丢失有条件地设置CDN-Cache-Control
和Cloudflare-CDN-Cache-Control
头。您可以使用wp_remote_get
或wp_remote_post
来调用GTranslate服务。检查返回的HTTP响应的头,并使用header()
有条件地设置该高速缓存控制头。由于您将从PHP代码中完成此操作,因此您将完全控制HTTP响应,包括能够根据GTranslate响应的内容有条件地设置头。
请参阅“WordPress Filter Hooks“以将其包含到WordPress设置中。
这意味着这个解决方案旨在用于自定义WordPress钩子或主题的
functions.php
文件中,与GTranslate插件代码分开。例如,您可以在WordPress本身和所有插件完全加载后使用
wp_loaded
action hook执行自定义代码:在
functions.php
文件中,您可以添加以下内容:在
my_custom_function
中,您可以使用wp_remote_get
或wp_remote_post
函数与GTranslate API通信,然后检查响应头,如上所述。1.原帖,如datanumen.com/outlook-repair并不需要联系GTranslate,但你的钩子函数会一直联系GTranslate服务器,这可能会减慢页面加载速度。
1.有可能当你的钩子函数得到一个有效的页面(带有x-gt字段)时,但是以后对gmarte.php的调用得到一个空白页面。
考虑到您的限制以及与GTranslate服务不一致行为的可能性,在插件代码
gtranslate.php
中包含直接修改的解决方案越来越有可能成为最佳方法。如果您担心页面加载速度变慢以及对GTranslate服务器的不同调用之间可能存在不一致,您可以使用两步方法:
1.使用一个WordPress钩子,它只在你知道会涉及翻译的帖子上触发(如果在联系GTranslate之前有这样的信息)。在这个初始阶段,不要联系GTranslate服务器。相反,使用它来标记请求以进行进一步处理。
1.修改
gtranslate.php
以查找此标志。如果设置了此标志,请继续联系GTranslate服务,并根据x-gt
字段的存在与否有条件地设置CDN-Cache-Control
和Cloudflare-CDN-Cache-Control
标头。关键是设置某种标志或条件,可以在不向GTranslate发出HTTP请求的情况下进行检查。该标志将在修改后的
gtranslate.php
文件中进行检查,以决定是否向GTranslate发出HTTP请求,并相应地设置该高速缓存控制头。