2013-08-19 7 views
1

У меня есть две домены - example.com и example.co. Оба домена находятся на том же веб-хостинга и оба корня документа являются «public_html»Переадресация Htaccess не переписывается

Я хочу переписать любую строку после example.co (например example.co/abc123) для https://www.example.com/page.php?url=TEXT-HERE

Вот мой Htaccess, но он, похоже, перенаправляется вместо переписывания.

RewriteCond %{HTTP_HOST} ^(www\.)?example\.co$ [NC] 
RewriteRule ^(.*)$ https://www.example.com/page.php?code=$1 
+1

Изменение имени домена подразумевает перенаправление, так как браузер должен сделать новый запрос с другим хостом HTTP. –

+0

Значит ли это, что нет способа переписать адрес браузера? –

+0

Я удалил свой ответ ниже - можете ли вы описать свою ситуацию более подробно? У вас есть домен .co' и домен .com. Вы не можете перезаписывать их между ними, если их файлы не находятся в одном и том же корневом документе virtualhost. –

ответ

1

Из Вашего вопроса вместе с комментариями, кажется, вы хотите, чтобы перенаправить запрос от example.co с и без www к page.php?code=anything after, если это правильно, то вы можете попробовать:

# match example.co with and without www 
RewriteCond %{HTTP_HOST} ^(www\.)?example\.co$ [NC] 
# make sure we don't redirect page.php 
RewriteCond %{REQUEST_FILENAME} !page\.php 
# internally redirect anything received to page.php as query string to code 
RewriteRule ^(.*)$ /page.php?code=$1 [L] 

Это внутренне перенаправляется, поэтому пользователь все равно будет видеть домен example.co.

Учитывая, что вы все еще хотите использовать HTTPS, в случае, если его уже не вы можете в дальнейшем использовать эту функцию, вместо вышеприведенного правила:

# if it does not start with WWW we redirect to www.domain 
# make sure the domain.co is enclosed by parenthesis like below 
RewriteCond %{HTTP_HOST} !^www\.(example\.co)$ [NC] 
# we use this to make sure we are redirecting the right domain 
# in case of multiple domains 
RewriteCond %{HTTP_HOST} example\.co$ [NC] 
RewriteRule^http://%1%{REQUEST_URI} [L,R=301] 

# if HTTPS is not being used we force it to HTTPS 
RewriteCond %{HTTPS} !=on 
# because we want to force it for this domain only 
RewriteCond %{HTTP_HOST} ^example\.co$ [NC] 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# and now we finally do the internal redirect 
# match example.co, we don't need to match the www anymore 
RewriteCond %{HTTP_HOST} ^example\.co$ [NC] 
# here we check if the file on the URL is page.php 
# we don't want it redirect or we may fall into a loop 
RewriteCond %{REQUEST_FILENAME} !page\.php 
# internally redirect anything received to page.php as query string to code 
RewriteRule ^(.*)$ /page.php?code=$1 [L] 

В противном случае правило вы должны должны работать нормально:

RewriteCond %{HTTP_HOST} ^(www\.)?example\.co$ [NC] 
RewriteRule ^(.*)$ https://www.example.com/page.php?code=$1 [R=302,L] 

Когда домен отличается или протокол отличается, он даст перенаправление вроде этого или нет, так оно и работает.

Так что если вы попытаетесь перенаправить из домена A в домен B внутренне, это не сработает.

То же самое относится к поддомену в основном домене или других доменах или других поддоменах.

Проще говоря, вы можете перенаправить внутренне из области, о которой идет речь,.

+0

Блестящий - решил проблему. Большое спасибо. –

+0

@JasonLipo, пожалуйста. – Prix

+0

@JasonLipo: Счастлив, что ваша проблема решена, однако в соответствии с вашим вопросом вы хотели бы получить «https: // www.example.com» в перенаправленном URL-адресе.Просто помните, что внутренняя переадресация не будет обеспечивать https. – anubhava

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