перенаправить запрос файла для субдомена и основного сайта с определенными аргументами? - PullRequest
0 голосов
/ 05 октября 2011

Я использую подстановочные субдомены. Цель сайта - запустить виртуальный поддомен. какая функциональность должна быть в том, что когда файлы с основного сайта они будут перезаписаны для чистых URL. Но когда я звоню одни и те же файлы образуют поддомен как xyz.doamin.com/my-file.php, то это должно быть переписано, как если бы он вызывал этот файл с аргументом subdoamin, как domain.com/my-file.php?var=xyz. В настоящее время то, что я сделал для вызова файла, это

Options +FollowSymLinks
RewriteEngine on

## Redirecting all non-www domains to www.domain.com
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,NC,L]


RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{QUERY_STRING}  ^$
RewriteRule ^(.*)$   http://www.domain.com%{REQUEST_URI}?var=%1 [L]


RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{QUERY_STRING}  !^$
RewriteRule ^(.*)$   http://www.domain.com%{REQUEST_URI}?%{QUERY_STRING}&var=%1 [L]



RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{QUERY_STRING}  ^$
RewriteRule ^(.*)$   http://www.domain.com/index.php?subdomain=%1 [L]


RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{QUERY_STRING}  !^$
RewriteRule ^(.*)$   http://www.domain.com%{REQUEST_URI}?%{QUERY_STRING}&subdomain=%1 [L]

Выдает внутреннюю ошибку 500 для вызова файла.

1 Ответ

0 голосов
/ 05 октября 2011

Набор правил 4 будет перекрываться с набором правил 1 и 2. Я подозреваю, что это вызывает проблему.Поэтому я думаю, что все 3 нуждаются в дополнительной проверке RewriteCond на REQUEST_URI.

На самом деле вам не нужен набор правил 4. Просто включение index.php в качестве значения по умолчанию должно помочь.Если, конечно, вам не нужны URL-адреса, подобные http://www.domain.com/?var=xyz, в этом случае вам нужно правило 4, но вам нужно разделить его на 2 - один с QUERY_STRING и один без, как правило 1 и 2

.

Кроме того, не является ли %1 из регулярного выражения в самом rewriteRule, а не в предыдущем rewriteConds?Если это так, то ваше регулярное выражение неверно, потому что оно будет устанавливать var= для всего исходного URL.

Просмотр журнала ошибок - хорошая идея, поскольку она даст вам причину ошибки 500.

Редактировать: Хорошо, попробуйте что-то вроде этого (не проверено)

## Redirecting all non-www domains to www.domain.com
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L,QSA]

## Redirecting / requests to index.php
# Note: Use the QSA flag for handling with or without query string
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteRule ^(.*)$   http://www.domain.com/index.php?var=%1 [L,QSA]

## Redirecting /something requests to index.php
# Note: Use the QSA flag for handling with or without query string
RewriteCond %{REQUEST_URI} ^/.+$
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteRule ^(.*)$   http://www.domain.com%{REQUEST_URI}?var=%1 [L,QSA]
...