Переписать .htaccess для одновременного изменения домена и удаления пути - PullRequest
0 голосов
/ 26 февраля 2012

Моя структура URL в настоящее время выглядит следующим образом:

http://domain.com/folder/filename (ТОК)

Я хочу изменить это, чтобы вместо этого я мог использовать следующий URL:

http://sub.domain.com/filename (NEW)

Таким образом, при доступе к ТЕКУЩЕМУ или НОВОМУ URL-адресу должен загрузиться файл, расположенный по ТЕКУЩЕМУ URL-адресу, но отобразить НОВЫЙ URL-адрес в адресной строке. Он должен применяться только к пути "/ folder /".

sub.domain.com является зеркалом домена.com, т.е. они совместно используют одну файловую систему и корневой каталог.

Это то, что я имею до сих пор:

Options +FollowSymLinks
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]
RewriteCond %{REQUEST_URI} ^/folder/?(.*)$ [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L]

Это работает, но отсутствует правило для удаления "/ folder /" из пути. Я попытался объединить несколько RewriteRule без удачи. Есть идеи? Спасибо.


ОБНОВЛЕНИЕ: Еще раз спасибо @ Гербен - я понимаю, что ваши правила делают сейчас, но второй не работает для меня. Я подозреваю, потому что это противоречит некоторым другим правилам переписывания, в частности тем из WordPress, которые ниже в моем файле .htaccess:

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

Из-за этого страница заканчивается циклом перенаправления, т. Е. (Из Chrome): «Веб-страница http://sub.domain.com/folder/index.php привела к слишком большому количеству перенаправлений». - в то время как URL, к которому я первоначально пытался получить доступ, был, например, http://sub.domain.com/page

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2012
RewriteCond %{THE_REQUEST} /folder/
RewriteRule ^folder/(.*)$ http://sub.domain.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^sub\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/folder/
RewriteRule ^(.*)$ folder/$1 [L]

# WordPress rules here

edit второй R=301 не должен был быть там

Но это не сработает, так как WordPress не может знать, что вы хотите folder. Вы можете добавить флаг Proxy к перезаписи, но затем вам нужно изменить указанное выше правило, чтобы не перенаправлять этот внутренний запрос прокси.

0 голосов
/ 26 февраля 2012

Попробуйте:

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]
RewriteRule ^(folder/)?(.*)$ http://sub.domain.com/$2 [R=301,L]

Это перенаправит все на sub.domain.com и удалит часть /folder URI , если она там есть .Если нет, он перенаправляет и оставляет URI нетронутым.

...