Wordpress .htaccess пренасочва разширението на файла и не е чувствителен към главни и малки букви

Премествам уебсайт към 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.06.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.06.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)


person user801816    schedule 16.06.2011    source източник
comment
Доколкото разбирам, искате: 1) да промените файловото разширение в крайния url от html на htm; 2) игнориране на главния регистър при пренасочване .. или промяна на URL адреса на крайната страница с малки букви?   -  person LazyOne    schedule 17.06.2011
comment
1) Да. Променете заявката на .html за пренасочване към .htm 2) Вярвам, че искам да игнорирам малки и големи букви. MYPAGE.html --› mypage.htm, или mYPaGe.html --› mypage.htm, или MYpaGE.html --› mypage.htm и т.н.... основно игнориране на главния регистър на заявката и пренасочване към малки букви. htm версия   -  person user801816    schedule 17.06.2011
comment
Мислех, че нещо подобно може да свърши работа. code RewriteCond %{REQUEST_URI} ^section/individual-page.html [NC] RewriteRule ^(.*)$ mydomain.com/wp-install/section/individual-page.htm/$1 [L,R=301] Мисля, че съм на прав път. [NC] трябва да игнорира малки и големи букви, нали?   -  person user801816    schedule 17.06.2011


Отговори (1)


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="/bgPROPER_URL_GOES_HERE"/> във вашия <header>.

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

person LazyOne    schedule 17.06.2011
comment
@LazyOne благодаря за отговора. Възможно ли е просто да се използва стъпка 3? Нямам нищо против пренасочването на всички отделни страници, стига да игнорира главни и малки букви и да пренасочва .html към .htm. Опитах просто да поставя стъпка 3) в моя .htaccess и изглежда не работи. Редът на изявленията ми има ли значение? Пренасочването на .html към .htm не е необходимо да се случва с всички заявки; може да са конкретни страници (или в този случай публикации). - person user801816; 17.06.2011
comment
Това не са стъпки, а опции (отделно една от друга). Но да, можете да отидете само с #3. Да, редът има значение. Моля, покажете текущия си .htaccess (редактирайте първоначалния си въпрос) -- бих искал да видя къде се опитвате да вмъкнете нови директиви. - person LazyOne; 17.06.2011
comment
Добре, виждам вашата актуализация: преместете всички такива правила за пренасочване (RewriteRule ^ORLANDO-criminal-defense-attorney/defense-attorney-NEJAME.html$ /orlando-criminal-defense-attorney/defense-attorney-nejame.htm [QSA,NC,R=301]) точно след (или точно преди) това правило: RewriteRule ^index\.php$ - [L] - person LazyOne; 17.06.2011
comment
Направих това, което ми предложи. Без късмет. Направих го след и преди. Трябва ли да се променят параметрите в скобите []? - person user801816; 17.06.2011
comment
Кое правило имате предвид (за [] скоби)? Всички изглеждат добре. Мисля, че има нещо общо с този ред RewriteBase /wp-test-2011-06-13/ - може да повлияе на всички правила. Трябва да го отстраните малко, за да видите какво става. Опитайте да добавите това правило RewriteRule ^(.*)$ index.php&apth=$1&uri=%{REQUEST_URI} [QSA,R=301] точно под правило RewruteBase (това е временно). Ако не работи, опитайте да добавите /wp-test-2011-06-13/ преди index.php. Отидете до който и да е URL адрес, който искате да пренасочите, и публикувайте кой URL ще видите в адресната лента, след като това правило влезе в сила (за съжаление няма лесен за използване инструмент за отстраняване на грешки). - person LazyOne; 17.06.2011
comment
Мога да ви уверя, че правилата са тествани и работят. Единственото нещо, за което мога да се сетя в момента защо не работят от ваша страна, е ефектът от правилото RewriteBase. Трябва да го проучите малко. Мога да помогна със съвет/идеи .. но не мога да го направя вместо вас от тук. - person LazyOne; 17.06.2011
comment
Не вярвам, че проблемите, които срещам, са свързани с RewriteBase /wp-test-2011-06-13/ (Това дефинира моята главна папка за моите wordpress файлове и index.php). Знаете ли какво означават следващите редове? RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wp-test-2011-06-13/index.php Мисля, че може да се наложи да премахна, променя или поставя ред преди/след някъде в тези редове. - person user801816; 20.06.2011
comment
Първото правило за пренаписване казва да не се прави нищо, ако се поиска /index.php. Второто правило трябва да пренапише всички заявки към /wp-test-2011-06-13/index.php, ако исканият ресурс (файл или директория) не съществува. TBH Не съм сигурен за . част -- бих използвал поне .*. Все още мисля (е, това е единственото нещо, което мога да направя в този случай от тук), че трябва да има проблем с реда на правилата или пътищата на папките. - person LazyOne; 20.06.2011
comment
Правилото RewriteRule ^ORLANDO-criminal-defense-attorney/defense-attorney-NEJAME.html$ /orlando-criminal-defense-attorney/defense-attorney-nejame.htm [QSA,NC,R=301], можете ли да добавите наклонена черта преди точката в първата половина на правилото -- направете го така: RewriteRule ^ORLANDO-criminal-defense-attorney/defense-attorney-NEJAME\.html$ /orlando-criminal-defense-attorney/defense-attorney-nejame.htm [QSA,NC,R=301] - person LazyOne; 20.06.2011
comment
Повече от убеден съм, че отговорът се крие в това как е написано/поставено RewriteRule. По-конкретно, TestString и как се записва: ^ORLANDO-criminal-defense-attorney/defense-attorney-NEJAME\.html$ Форматът на низа? Разширението на файла в края? - person user801816; 20.06.2011
comment
Правилото е изписано правилно -- работи абсолютно добре на моя компютър. Позиция в .htaccess -- да, но вече казахте, че сте го поставили доста на върха (моля, можете ли да актуализирате публикацията с текущите позиции). Както вече споменах, не съм сигурен за пътищата (начина, по който този (/wp-test-2011-06-13/) може да повлияе на цялото нещо). Вижте коментар #5 тук -- можете ли да направите това правило и да покажете къде ще бъдете пренасочени? - person LazyOne; 20.06.2011
comment
Опитах да добавя и премахвам разширения на директории, препозициониране на правила. Доста опитвам различна комбинация от пренаписване, за която се сещам. През повечето време получавам страница на Wordpress, която не е намерена. Аз също (в зависимост от това какво съм променил и къде) получавам грешка на сървъра 500 или грешка 301 постоянно преместен от Apache. Можете да разгледате последната ми актуализация. Но непрекъснато променям моя .htaccess, за да видя дали имам късмет. - person user801816; 20.06.2011
comment
Този вид правило за пренаписване трябва да бъде ПРЕДИ първия RewriteCond (тъй като тези 3 инструкции казват на Apache да пренасочи всички неизвестни URL адреси към index.php). Също така, моля, опитайте RewriteRule без водещо ^, напр. RewriteRule ORLANDO-criminal-defense-attorney/defense-attorney-NEJAME\.html$ /orlando-criminal-defense-attorney/defense-attorney-nejame.htm [QSA,NC,R=301] както и този вариант: RewriteRule ORLANDO-criminal-defense-attorney/defense-attorney-NEJAME\.html$ /wp-test-2011-06-13/orlando-criminal-defense-attorney/defense-attorney-nejame.htm [QSA,NC,R=301] - person LazyOne; 21.06.2011
comment
Опитах няколко различни комбинации. Единственото нещо, за което се сещам, че може да пречи, е, че имам плъгин за Wordpress, който поставя .htm във всички публикации и страници. Но RedirectMatch 301 работи, така че не съм сигурен какво може да се обърка. - person user801816; 21.06.2011
comment
Тогава не знам, съжалявам. Мога само да ви уверя, че самото правило работи. Не съм работил директно с WordPress и не знам почти нищо за добавките, които може да има и как те могат да повлияят на пренасочването тук. - person LazyOne; 21.06.2011