Wordpress .htaccess перенаправляет расширение файла и без учета регистра - PullRequest
0 голосов
/ 16 июня 2011

Я перевожу веб-сайт в WordPress, но хочу сохранить текущую структуру URL для целей SEO.

Текущий сайт использует комбинацию файлов .htm и .html. Я нашел успех в перенаправлении на .htm, когда запрос .html.

Например

    RedirectMatch 301 (.*)\wp-site/mywebpage.html$ http://www.mydomain.com/wp-site/mywebpage.htm

У меня проблема со следующим:

когда файл .html имеет верхний и нижний регистр. Я не могу найти решение, чтобы перенаправить любой запрос, несмотря на случай его эквивалент .htm

Например: My-Posts / Alpha-Page.html необходимо перенаправить на my-posts / alpha-page.htm или MY-POSTS / ALPHA-PAge.html перенаправляет на my-posts / alpha-page.htm ( или любой из «my-posts / alpha-page», который содержит прописные буквы. В основном все запросы, несмотря на то, что регистр должен быть перенаправлен на все строчные файлы .htm)

Я знаю, что это немного сложно, потому что это комбинация 1) Я перенаправляю на .htm и 2) для нечувствительности к регистру.

Несколько вещей для рассмотрения:

  1. Я знаю, что посты Wordpress без учета регистра. Wordpress статический страница чувствительна к регистру.
  2. Я знаю, что RedirectMatch не будет работать потому что это точно соответствует.
  3. Я считаю, что мне нужно использовать RewriteCond и RewriteRule, но не могу найти "хороший" шаг за шагом объяснения. Кроме того, я не понять их переменные (то есть: % {HTTP_HOSTS}) и обычный соглашение о выражении.
  4. Я не Apache / .htaccess или эксперт по регулярным выражениям любым значит.

Теоретически, похоже, должен быть способ, чтобы это работало. Я буду продолжать проверять, смогу ли я найти решения здесь в stackoverflow или других внешних ресурсах, и если я действительно найду решение здесь в stackoverflow, я отмечу это как решенное и удалю его.

Любая помощь приветствуется!

Спасибо

ОБНОВЛЕНИЕ 17/17/2011:

Вот мой текущий файл .htaccess

    # BEGIN WordPress

    <IfModule mod_rewrite.c>


    RewriteEngine On


    RewriteBase /wp-test-2011-06-13/

    RewriteRule ^index\.php$ - [L]

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule . /wp-test-2011-06-13/index.php


    RedirectMatch 301 (.*)\wp-test-2011-06-13/redirect.html$ http://www.mydomain.com/wp-test-2011-06-13/redirect.htm


    RewriteRule ^ORLANDO-criminal-defense-attorney/defense-attorney-NEJAME.html$ /orlando-criminal-defense-attorney/defense-attorney-nejame.htm [QSA,NC,R=301]


    </IfModule>


    # END WordPress

ОБНОВЛЕНИЕ 20/20/2011:

Вот мой текущий файл .htaccess:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>

    Options +FollowSymlinks
    RewriteEngine On

    RewriteBase /wp-test-2011-06-13/
    RewriteRule ^/wp-test-2011-06-13/index\.php$ - [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* /wp-test-2011-06-13/index.php 

    RedirectMatch 301 (.*)\wp-test-2011-06-13/redirect.html$ http://www.mydomain.com/wp-test-2011-06-13/redirect.htm

    RewriteRule ^ORLANDO-criminal-defense-attorney/defense-attorney-NEJAME\.html$ /orlando-criminal-defense-attorney/defense-attorney-nejame.htm [QSA,NC,R=301]

    </IfModule>

    # END WordPress

Я получаю страницу WordPress «Страница не найдена», когда я набираю http://www.mydomain.com/wp-test-2011-06-13/ORLANDO-criminal-defense-attorney/defense-attorney-NEJAME.html (или строчный эквивалент с .html)

1 Ответ

1 голос
/ 17 июня 2011

1) Да, вы можете "легко" сделать это с помощью mod_rewrite .. НО эти инструкции необходимо поместить в файл конфигурации (внутри тега <VirtualHost>) ) как директива RewriteMap, к сожалению, не может использоваться в .htaccess.

RewriteEngine On
RewriteMap upper2lower int:tolower
RewriteRule ^/(.+)\.html$ /${upper2lower:$1}.htm [QSA,NC,R=301]

2) Если вы не можете изменить конфигурационный файл, вы можете по крайней мере перенаправить html на htm.

RewriteRule ^(.+)\.html$ /$1.htm [QSA,NC,R=301]

Есть еще несколько опций, которые можно использовать с .htaccess:

3) Создать правило перезаписи для каждой из таких страниц - довольно неэффективно и требует постоянного обновления (новое правило для каждой новой страницы) - регистр здесь не имеет значения:

RewriteRule ^MYPAGES/some-Page.html$ /mypages/some-page.htm [QSA,NC,R=301]

4) Сделайте 2-шаговое перенаправление: 1) перенаправьте html в какой-то специальный php-файл, который при выполнении перенаправляет на правильный URL в нижнем регистре. Выполнимо .. но безобразно (плюс 2 перенаправления участвуют).

Если вы не можете сделать # 1, то придерживайтесь # 2 и убедитесь, что вы используете <link rel="canonical" href="PROPER_URL_GOES_HERE"/> в вашем <header>.

http://www.google.com/support/webmasters/bin/answer.py?answer=139394

...