2010-03-23 1 views
2

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

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

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

... а также 100 других.

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

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 выглядит this-

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

http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirect говорит: «Также URL-путь должен быть полным URL-адресом, а не относительным путем, даже если он используется с файлами .htaccess или внутри разделов . " – artlung

+1

Кроме того, на более раннем веб-сайте следите за переадресацией, которую бывшие разработчики могли добавить в httpd.conf или в другие файлы конфигурации, которые могут мешать. – artlung

ответ

2

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

+0

Я не думаю, что они должны быть там. 95% моих перенаправлений работают на этом конкретном сайте. – Marty

+1

http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirect говорит: «Также URL-путь должен быть полным URL, а не относительным путь, даже если он используется с файлами .htaccess или внутри разделов . " – artlung

0

Необходимо указать доменное имя при перенаправлении.

Никогда не смешивайте директивы 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 должен содержать протокол и доменное имя. Это правило должно немедленно следовать правилу canonicalisation, отличному от www.

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

 Смежные вопросы

  • Нет связанных вопросов^_^