2015-11-05 4 views
0

Я как бы новичок в использовании mod_rewrite в .htaccess, пожалуйста, простите меня. Я искал по всему миру ответ, но, возможно, я не смотрю в нужных местах или, возможно, .htaccess - это даже не подходящее место для такого рода вещей.Apache Redirect (используя .htaccess)

Скажем, у меня есть два домена: joebloggs.com и bloggs.com.

Когда вы joebloggs.com в вашем браузере, я хотел бы, чтобы перенаправить https://www.bloggs.com/joe.

Однако, если вы идете в joebloggs.com/foobar, я хотел бы перенаправить https://www.bloggs.com/foo/bar.

Примечание: Я знаю, что это кажется контрпродуктивным, переходя от более короткий URL, чтобы более длинный, но проблема заключается в том, что маркетинговые материалы уже были распространены с URL joebloggs.com/foobar ...: -/

То, как я пытался структурировать это в файле .htaccess, пока не работает.

<IfModule mod_rewrite.c> 
RewriteEngine on 
# 
# redirect joebloggs.com/foobar to https://www.bloggs.com/foo/bar 
RewriteCond %{HTTP_HOST} ^joebloggs\.com\/foobar [NC,OR] 
RewriteCond %{HTTP_HOST} ^www\.joebloggs\.com\/foobar [NC] 
RewriteRule ^(.*)$ https\:\/\/www\.bloggs\.com\/foo\/bar [L,R=301,NC] 
# 
# redirect joebloggs.com to https://www.bloggs.com/joe 
RewriteCond %{HTTP_HOST} ^joebloggs\.com$ [NC,OR] 
RewriteCond %{HTTP_HOST} ^www\.joebloggs\.com$ [NC] 
RewriteRule ^(.*)$ https\:\/\/www\.bloggs.com\/joe [L,R=301,NC] 
</IfModule> 

Когда я положил joebloggs.com в браузере, он перенаправляет правильно https://www.bloggs.com/joe - но когда я пытаюсь идти к joebloggs.com/foobar, то URL остается неизменным и, таким образом, переходит на страницу 404 (потому что это не существует).

Что я делаю неправильно? Я не делаю этого оптимальным способом или не использую .htaccess/mod_rewrite, как он был предназначен?

Извините за то, что я долготерплен, надеюсь, что дал достаточно информации. Спасибо за любую помощь и время, потраченное на это!

ответ

0

Первый набор правил абсолютно бесполезен. Обновить второй набор до:

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^(www\.)?joebloggs\.com$ [NC] 
RewriteRule ^/?$ https://www.bloggs.com/foo [R=301,L,NC,QSA] 


RewriteCond %{HTTP_HOST} ^(www\.)?joebloggs\.com$ [NC] 
RewriteRule ^foo(.*)$ https://www.bloggs.com/foo/$1 [R=301,L,NC,QSA] 
+0

Спасибо - я попробую это и посмотрю, как это работает! В то же время, как насчет первого набора правил делает его бесполезным? Это просто, что он избыточен, когда заменен набором, который вы предоставили? – theRBF

+0

@theRBF Переменная 'HTTP_HOST' не получает URL-адрес. – hjpotter92

+0

Хорошо, спасибо @ hjpotter92, это объяснение имеет смысл. Я попробовал ваше предложение, и это не сработало для меня, но ... Я просто немного изменил свой проблемный код, потому что понял, что способ, которым я его представлял, был немного запутанным и, возможно, вас немного сбил (извините что). Таким образом, я хотел бы перенаправить 'joebloggs.com/foobar' на' https: // www.bloggs.com/foo/bar', но также и 'joebloggs.com' на' https: // www .bloggs.com/joe'. – theRBF