Избавляемся от старых постов с расширением .html, но теперь URL-адрес домашней страницы получает конечный «индекс» в конце - PullRequest
0 голосов
/ 07 апреля 2011

Я недавно импортировал старый Blogger в Wordpress ( с тем же доменом !).

Все работает нормально, но мне НУЖЕН редирект 301 для SEO и общих ссылок, чтобы все старые посты, имеющие структуру Blogger "www.mysite.com/post-title-truncated.html", теряли .html в конец, и Wordpress, мы надеемся, получит этот пост (иногда Wordpress достаточно любезен, чтобы угадать постоянную ссылку на пост, даже если он немного другой или неправильный).

Итак, поскольку у меня есть собственная структура сообщений, Wordpress уже добавил свои собственные стандартные правила в мой .htaccess:

# 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

Первое, что я попытался сделать, чтобы избавиться от старого .html в постоянных ссылках на посты, было следующее (после правил Wordpress):

RedirectMatch 301 ^(.*)\.html$ http://www.mysite.com/$1

Это прекрасно работает: он избавляется от старого .html из импортированных постов Blogger, и обычно Wordpress угадывает правильный пост, даже когда (старая) постоянная ссылка усекается.

Проблема? Теперь он добавляет «index» в конце URL-адреса домашней страницы (www.mysite.com/), возвращая 404. Все остальные ссылки в порядке.

Я почти уверен, что это связано с правилами Wordpress, но я просто не могу найти способ избавиться от .html + заставить Wordpress найти сообщение даже с усеченной постоянной ссылкой + не иметь этого кровавого "индекса" в конце после www.mysite.com/ URL домашней страницы.

Есть идеи ??

Ответы [ 2 ]

0 голосов
/ 30 апреля 2013

Я ценю, что вы вернулись сюда, чтобы дать решение. Существует проблема для тех, кто находится на серверах Windows, которые не поддерживают mod_rewrite, вместо этого вы должны использовать модуль перезаписи URL-адресов Microsoft.

В вашем файле WordPress web.config добавьте это правило в system.webServer

<rewrite>
    <rules>
        <rule name="Main Rule" stopProcessing="true">
            <match url=".*" />
            <conditions logicalGrouping="MatchAll">
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            </conditions>
            <action type="Rewrite" url="index.php/{R:0}" />
        </rule>
    </rules>
</rewrite>
0 голосов
/ 07 апреля 2011

Итак, я решил проблему, выполнив следующее:

RewriteRule ^(.*)\.html$ http://www.mysite.com/$1 [R=301,L]

# 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...