Проблема с правилами mod_rewrite - PullRequest
1 голос
/ 18 декабря 2011

Я пытаюсь настроить правила перезаписи для веб-сайта, но пока есть одна проблема. На данный момент это настроено локально для тестирования.

Настройка представляет собой основную корневую папку, в которой есть несколько подпапок, а некоторые из них являются поддоменами. Субдомены уже сопоставлены в httpd.conf и работают правильно.

example.com
sub.example.com
something.example.com
...

Со следующей структурой папок:

C:/website
C:/website/css
C:/website/images
C:/website/sub (subdomain)
C:/website/something (subdomain)

Итак, файлы в папке 'website' используются example.com, а также папки, которые не отображаются в качестве поддоменов. В каждом поддомене есть определенные файлы, которые использует каждый поддомен, но они также используют некоторые общие файлы из родительского каталога (не очень важные для данной проблемы). Для основного веб-сайта (а также для поддоменов) все проходит через файл index.php (уже решенный с помощью правил перезаписи), поэтому прямой доступ к другим файлам (также не очень актуален).

Итак, моя проблема в том, что если вы обращаетесь к поддомену без «www» (sub.example.com), все в порядке. При доступе через 'www' (http://www.sub.example.com), он переходит на основной сайт.

Вот мой файл .htaccess (переписать правила):

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteRule \.(css|jpe?g|gif|png|js)$ - [L]

RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]

RewriteRule ^([^/\.]+)/?$ /index.php?cmp=$1 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ /index.php?cmp=$1&page=$2 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ /index.php?cmp=$1&subsection=$2&page=$3 [L]

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

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 декабря 2011

Это правило странное:

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Я делаю почти то, что вы описываете, но нет смысла добавлять "www", если есть уже что-то. Что я делаю:

# if domain name without "www", add them:
RewriteCond %{HTTP_HOST} ^mydomainname\.(fr|com|net|org|eu) [NC]
# add www *and* force redirection :
RewriteRule (.*) http://www.mydomainname.%1$1 [QSA,R=301,L]

Таким образом, вы добавляете www только тогда, когда это необходимо, т. Е. Когда нет 'sub' вообще.

...