htaccess Redirect 301 проблема .. все перенаправления с одной строкой не перенаправляют и 404 - PullRequest
2 голосов
/ 23 марта 2010

Итак, я переместил веб-сайт и пытаюсь 301 перенаправить все, что я делаю довольно часто, так что это странная проблема, но, вероятно, что-то глупое я не вижу.

ВСЕ мои перенаправления работают нормально, за исключением сбоя любого перенаправления, в котором первая строка начинается с "/ Dining" или "/ Dining". Например, этот редирект работает нормально -

Redirect 301 /healthfitness/teeth.cfm /healthcare/pretty-teeth

... а также сотни других.

Но все это терпит неудачу (гораздо больше, чем я показываю) -

Redirect 301 /Dining/diningreviews/vawines.cfm /shopping/wines-2004
Redirect 301 /Dining/diningathome/carrotcake.cfm /home-garden/carrot-cake-2003
Redirect 301 /Dining/diningathome/oldvarolls.cfm /home-garden/virginia-rolls-2003
Redirect 301 /Dining/diningathome/pumpkincake.cfm /home-garden/pumpkin-cake-2003

Верх моего .htaccess файла выглядит так -

RewriteEngine On
RewriteBase /

#uploaded files
RewriteRule ^(.*/)?files/$ index.php [L]
RewriteCond %{REQUEST_URI} !.*wp-content/plugins.*
RewriteRule ^(.*/)?files/(.*) wp-content/blogs.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteCond %{REQUEST_URI} ^.*/wp-admin$
RewriteRule ^(.+)$ $1/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-.*) $2 [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

<IfModule mod_security.c>
<Files async-upload.php>
SecFilterEngine Off
SecFilterScanPOST Off
</Files>
</IfModule>

#Everything below here are Redirect 301s

Ответы [ 2 ]

2 голосов
/ 23 марта 2010

Операторы Dont redirect должны включать протокол в пункт назначения?

0 голосов
/ 15 апреля 2011

Вы должны включить доменное имя в редирект.

Никогда не смешивайте директивы mod_alias и mod_rewrite в одном файле. Если вы используете RewriteRule для любого из ваших правил, вы должны использовать RewriteRule (не Redirect или RedirectMatch) для ВСЕХ ваших правил.

Перечислите все перенаправления (используя синтаксис RewriteRule) перед любым переписыванием (используя синтаксис RewriteRule), в противном случае вы непреднамеренно выставите перезаписанные указатели обратно в Интернете в качестве новых URL-адресов.

Код, который вы сейчас используете, очень неэффективен. Шаблоны .* означают, что ваш файл .htaccess будет пытаться сотнями тысяч пробных совпадений «отменить и повторить» для каждого запроса URL, попадающего на сервер.

В частности,

^(.\*/)? следует заменить на ^([^/]+/)\* в двух местах.

^.\*/ следует заменить на ^/([^/]+/)\*

!.\*wp-content/plugins.\* следует заменить на !wp-content/plugins

^([_0-9a-zA-Z-]+/)?(.\*\\.php)$ следует заменить на ^([_0-9A-Z-]+/)?([^.]+\\.php)$ с добавленным флагом [NC].

Перенаправление «добавить косую черту в / wp-admin» должно быть самым первым набором правил в файле, а целевой URL должен включать протокол и имя домена. Это правило должно быть немедленно соблюдено с правилом канонизации не из www в www.

Новый код может работать в сотни раз быстрее.

...