2017-06-07 50 views
7

Zbudowałem stronę internetową z React na pierwszym końcu i WordPress jako backend. Aby roboty indeksujące przeglądarkę widziały moją witrynę, skonfigurowałem wstępne renderowanie po stronie serwera i próbuję skonfigurować htaccess dla żądań proxy pochodzących z wyszukiwarek, aby były obsługiwane wstępnie renderowane strony.Jak mogę poprawić moją htaccess dla pośredniczenia w żądaniach indeksowania wyszukiwarek?

Do testowania używam narzędzia "Pobierz jako Google" w Google Webmasterach.

Oto moja próba:

<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 

Moim problemem jest to, że dyrektywa ta nie działa na mojej stronie internetowej i działa tylko na wewnętrznych stronach (http://example.com/inner-page/):

RewriteRule ^(?!.*?)$ http://example.com:3000/https://example.com/$1 [P,L] 

kiedy zmień ten wiersz na następujący wiersz, żądanie strony głównej jest rzeczywiście poprawnie skonfigurowane, ale wewnętrzne strony przestają działać.

RewriteRule ^(index\.php)?(.*) http://example.com:3000/https://example.com/$1 [P,L] 

Czy możesz pomóc mi naprawić regułę przepisywania, aby moja strona główna była również poprawnie skonfigurowana dla googlebota?

Odpowiedz

1

Zmiana RewriteRule do:

RewriteRule ^(.*)/?$ http://example.com:3000/https://example.com/$1 [P,L] 
+0

Próbowałem tego i stosowane narzędzia Pobierz jako Google w celu przetestowania. Tylko wewnętrzne strony są indeksowane. Strona główna nadal pokazuje błąd "Nie znaleziono" w moim narzędziu Google dla webmasterów. – Enthusiast

+0

Czy może to być spowodowane końcowym ukośnikiem używanym zawsze przez narzędzie Pobierz jako Google? – Enthusiast

+0

Zmieniam regułę z opcjonalnym końcowym ukośnikiem. Możesz spróbować – Croises

1

Pierwszy uniknąć repetetions

<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> 

następnie zmienić ^(?!.*?)$ do ^.*$ lub z dobrym wzorem jak [a-zA-Z0-9-.]*. Nie zapomnij użyć 0 lub więcej flag (*).

Poprawny kod będzie

<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>