Используйте htaccess для маскировки домена и имени папки

Я пытаюсь использовать htaccess и mod_rewrite, чтобы замаскировать один домен и две его подпапки с другим доменом. Например: http://example.com/sub/sub-sub/ в http://example-2.com/ Чтобы http://example-2.com/ это то, что отображается в адресной строке браузера, но содержание http://example.com/sub/sub-sub/ это то, что отображается на странице.

Я нашел этот вопрос / ответ, который должен выполнить это, но он не работает, когда я его реализую.

Текущий htaccess:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.+) [NC]
RewriteRule .*   http://example.com/sub/sub-sub/%1 [L]

Options -Multiviews

Вот вид моего каталога:

http://i.imgur.com/nihz1al.png

2 ответа

Решение

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

В RewriteRule шаблон проверяется по URL-пути, а не по домену. Если вам нужно протестировать домен, вы можете использовать RewriteCond

RewriteCond %{HTTP_HOST} !example-2.com
RewriteRule ^/?sub/sub-sub/(.*) http://example-2.com/$0 [R,L]

RewriteCond %{HTTP_HOST} example-2.com
RewriteCond %{REQUEST_URI} !^/?sub/sub-sub
RewriteRule .* sub/sub-sub/$0

Вы можете попробовать это:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  !^/sub/sub-sub         [NC]
RewriteCond %{REQUEST_URI}  ^/(.*)                 [NC]
RewriteRule .*   http://example.com/sub/sub-sub/%1 [L]

Перенаправляет навсегда

http://example-2.com/anything

Для того, чтобы:

http://example.com/sub/sub-sub/anything

Предполагается, что все строки являются фиксированными, кроме пути сегмента anything,

Для постоянного видимого перенаправления замените [L] с [R=301,L],

Приведенный выше набор правил должен быть включен в один файл.htaccess в http://example-2.com корневая директория.

ОБНОВИТЬ:

Чтобы пропустить правило для любого входящего URL-адреса без пути, например, http://example-2.com/замените эту строку:

RewriteCond %{REQUEST_URI} ^/(.*) [NC]

с этим:

RewriteCond %{REQUEST_URI} ^/(.+) [NC]

Другие вопросы по тегам