我已经在前端构建了一个React的网站,而WordPress则作为后端构建了一个网站。为了让搜索引擎爬虫能够看到我的网站,我已经在服务器端设置了预呈现,并且我正在尝试设置htaccess来代理来自搜索引擎的请求,以便为它们提供预渲染页面。
为了进行测试,我使用的是Google网站管理员中的“Google抓取方式”工具。
这是我的尝试:
<IfModule mod_rewrite.c>
RewriteEngine On
<IfModule mod_proxy_http.c>
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{HTTP_USER_AGENT} googlebot [NC,OR]
RewriteCond %{QUERY_STRING} _escaped_fragment_
# Proxy the request ... works for inner pages only
RewriteRule ^(?!.*?)$ http://example.com:3000/https://example.com/$1 [P,L]
</IfModule>
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
我的问题是该指令不适用于我的主页,仅适用于内页(http://example.com/inner-page/):
RewriteRule ^(?!.*?)$ http://example.com:3000/https://example.com/$1 [P,L]
当我将此行更改为以下行时,主页请求确实已正确代理,但内部页面停止工作。
RewriteRule ^(index\.php)?(.*) http://example.com:3000/https://example.com/$1 [P,L]
你能否帮我修复重写规则,以便我的主页也能正确代理googlebot?
答案 0 :(得分:1)
将RewriteRule
更改为:
RewriteRule ^(.*)/?$ http://example.com:3000/https://example.com/$1 [P,L]
答案 1 :(得分:1)
首先避免重复
<IfModule mod_rewrite.c>
RewriteEngine On
<IfModule mod_proxy_http.c>
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{HTTP_USER_AGENT} googlebot [NC,OR]
RewriteCond %{QUERY_STRING} _escaped_fragment_
# Proxy the request ... works for inner pages only
RewriteRule ^(?!.*?)$ http://example.com:3000/https://example.com/$1 [P,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
</IfModule>
然后将^(?!.*?)$
更改为^.*$
或使用[a-zA-Z0-9-.]*
等良好模式。别忘了在那里使用0或更多旗帜(*
)。
正确的代码将是
<IfModule mod_rewrite.c>
RewriteEngine On
<IfModule mod_proxy_http.c>
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{HTTP_USER_AGENT} googlebot [NC,OR]
RewriteCond %{QUERY_STRING} _escaped_fragment_
# Proxy the request ... works for inner pages only
RewriteRule ^(.*)$ http://example.com:3000/https://example.com/$1 [P,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
</IfModule>