Головоломка Redirecht 301 .htaccess

Я работаю над веб-сайтом www.successfulspeakernow.com, который был перемещен из обычной корневой папки public_html в папку public_html/successfulspeakernow.com

На новом сайте есть ряд новых страниц, а некоторые старые были отменены. Теперь в корневой папке public_html находится этот файл .htaccess, который содержит следующее:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^successfulspeakernow\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.successfulspeakernow\.com$
RewriteRule ^tedx\-amsterdam\-women$ "http\:\/\/www\.successfulspeakernow\.com\/category\/blog" [R=301,L]

RewriteEngine On
RewriteCond %{HTTP_HOST} ^successfulspeakernow.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.successfulspeakernow.com$
RewriteCond %{REQUEST_URI} !successfulspeakernow.com/
RewriteRule (.*) /successfulspeakernow.com/$1 [L]
Redirect 301 http://www.successfulspeakernow.com/introducing-speaker-in-the-spotlight http://www.successfulspeakernow.com/category/blog

#SetEnv PHPRC /etc/php_succesfulspeaker.ini

# 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

затем в папке public_html/successfulspeakernow.com есть второй файл .htaccess, содержащий следующее:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
Redirect 301 /introducing-speaker-in-the-spotlight http://www.successfulspeakernow.com/category/blog
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


</IfModule>

# BEGIN MemberPress Rules
<IfModule mod_rewrite.c>

RewriteCond %{HTTP_COOKIE} mplk=([a-zA-Z0-9]+)
RewriteCond /home/succes96/public_html/successfulspeakernow.com/wp-content/uploads/mepr/rules/%1 -f
RewriteRule ^(.*)$ - [L]

RewriteCond %{REQUEST_URI} !^/(wp-admin|wp-includes)
RewriteCond %{REQUEST_URI} !\.(txt|php|phtml|jpg|jpeg|gif|css|png|js|ico|svg|woff|ttf|xml|TXT|PHP|PHTML|JPG|JPEG|GIF|CSS|PNG|JS|ICO|SVG|WOFF|TTF|XML)
RewriteRule . /~succes96/successfulspeakernow.com/wp-content/plugins/memberpress/lock.php [L]

</IfModule>
# END MemberPress Rules

# END WordPress

Как видите, я включил строку Redirect 301. Кажется, это не работает. Когда я набираю: www.successfulspeakernow.com/introduction-speaker-in-the-spotlight в своем браузере, я НЕ перенаправляюсь на страницу блога, но получаю ошибку 404. Мой хостинг-провайдер ( Siteground.com) не смог найти, что с этим не так, и предложил перенаправить этот (и все остальные) URL-адреса через функцию перенаправления cPanel.

Может ли кто-нибудь сказать мне, если я делаю что-то не так? Это должно сработать, не так ли? забыл строку кода? эх....?

Спасибо,

Том Томстердам


person Thomsterdam Web Design    schedule 20.08.2014    source источник


Ответы (2)


Вам нужно использовать mod_rewrite вместо mod_alias. Директива Redirect является частью mod_alias, и оба модуля будут обрабатывать URL-адреса, а это означает, что все ваши правила будут перемешаны и в конечном итоге будут связаны с одним и тем же URL-адресом.

Удалите строку Redirect и замените ее на:

RewriteRule /introducing-speaker-in-the-spotlight http://www.successfulspeakernow.com/category/blog [L,R=301]
person Jon Lin    schedule 20.08.2014

Этот ответ только для того, чтобы уточнить, почему ваша конфигурация не работает. Решение Jon Lin должно работать.

Код не работает, потому что mod_rewrite имеет приоритет:

Это изменяет ваш запрошенный URI:

RewriteCond %{HTTP_HOST} ^successfulspeakernow.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.successfulspeakernow.com$
RewriteCond %{REQUEST_URI} !successfulspeakernow.com/
RewriteRule (.*) /successfulspeakernow.com/$1 [L]

Ваш запрос www.successfulspeakernow.com/introducing-speaker-in-the-spotlight преобразуется внутри (до работы mod_alias) в этот www.successfulspeakernow.com/successfulspeakernow.com//introducing-speaker-in-the-spotlight

Тогда перенаправление не применяется, так как URL-адрес не совпадает.

person NuTTyX    schedule 20.08.2014