htaccess и переписывание - PullRequest
1 голос
/ 11 июня 2011

Я только что создал поддомен на своем веб-сайте, главным образом потому, что я хочу к нему специальный адрес.

Допустим, мой веб-сайт: http://website.com И мой поддомен http://sub.website.com с его основной папкой в ​​/home/username/public_html/sub/

При вводе адреса субдомена адрес неожиданно меняется на http//website.com/sub/

как мне сохранить адрес субдомена?

РЕДАКТИРОВАТЬ для Денниса:

У меня есть правило, которое направляет всех http://www.website.com на http://website.com

Я использую

RewriteEngine on
Redirect to non-www
RewriteCond %{HTTP_HOST} !^(website\.com)?$
RewriteRule (.*) http://website.com/$1 [R=301,L]

даже если я закомментирую это, адрес все равно изменится на

http://website.com/sub/

С уважением, Александр

Ответы [ 2 ]

2 голосов
/ 11 июня 2011

Я думаю, что-то вроде этого будет работать (не проверено):

Options FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} !^website\.com
RewriteCond %{HTTP_HOST} ^([^.]+)
RewriteRule \?cat_id=([0-9]+)&photo_id=([0-9]+) http://website.com/$1/$2/
RewriteRule ^/(.*)/(.*)/ /%1.php?cat_id=$1&photo_id=$2 [P]

Примечание: согласно документации , параметры FollowSymLinks должны быть опцией, которую вы можете переопределить, чтобы получитьпереписать на работу.

Первый RewriteCond будет гарантировать, что хост "webiste.com" не будет перезаписан (а будут такие домены, как sub.website.com).Второй соответствует чему угодно вплоть до первой точки имени хоста.И то, и другое должно быть успешным, и если это так, хост-часть доступна в% 1.

Первый RewriteRule переписывает аргументы сценария php в пути к каталогам (изменение, замеченное по URL в браузере).Следующий RewriteRule использует флаг [P] для передачи любых запросов в форме / xx / yy / на% 1.php (наше запоминаемое имя хоста) с аргументами, передаваемыми в скрипт php.

Как я уже говорил, это не проверено, но, надеюсь, оно приведет вас "в правильном направлении".

РЕДАКТИРОВАТЬ: убрал [R] из первого перезаписиправить.

0 голосов
/ 11 июня 2011

Другим решением является выделение виртуального хоста для вашего субдомена (что должно произойти, если не возникнет много проблем), и этот VirtualHost игнорирует инструкции .htaccess главного домена. Вы действительно должны стараться, чтобы конфигурация вашего субдомена не зависела от конфигурации домена главного домена.

Допустим, ваш documentRoot в поддомене VH равен /home/username/public_html/sub/, когда Apache обслуживает файл index.php или index.html или что-либо еще в этой директории, он выполняет рекурсивный поиск всех .htaccess в /home/username/public_html/sub/, * 1005. *, /home/username/, /home/ и /. Таким образом, применяются правила, определенные в вашем основном домене (я думаю, что в /home/username/public_html/).

Вы можете указать этому поддомену VirtualHost игнорировать все файлы .htaccess, которые находятся до VH DocumentRoot, добавив:

<Directory />
   AllowOverride None
</Directory>
<Directory /home/username/public_html/sub/>
   AllowOverride All
</Directory>

Вы можете даже удалить AllowOverride All, удалить все .htaccess и поместить вещи, которые есть в .htaccess вашего субдомена (если он у вас есть), прямо в раздел <Directory /home/username/public_html/sub/>, тот же эффект без поиска Apache для поиска. части конфигурации в файловой системе (так быстрее).

...