Субдомен .htaccess в папку - PullRequest
1 голос
/ 24 августа 2010

Недавно я внес небольшие изменения в структуру папок на моем веб-сайте, и теперь один из моих перезаписываемых файлов кажется сломанным.

В прошлом у меня была папка /mydomain.com/ в public_html, в которой была создана вики. В той же папке были некоторые папки, которые я использовал для доступа к поддоменам, например, элементы и файлы.

Старая настройка:

#www to main website
RewriteCond %{HTTP_HOST} ^www.mydomain.com$
RewriteRule ^(.*)$ mydomain.com/$1 [L]

#subdomain to folder (members. => /members/, files. => /files/, etc)
RewriteCond %{HTTP_HOST} ^(.*).mydomain.com$
RewriteCond %{HTTP_HOST} !^www.mydomain.com$
RewriteRule ^(.*)$ mydomain.com/%1/$1 [L]

Достаточно просто, и когда я набрал в файле files.mydomain.com/myfile.zip, все заработало без проблем.

Недавно я установил несколько языков своей вики (что на самом деле не имеет отношения к вопросу, но только для уточнения ситуации), и я установил следующее правило:

#to the right language folder (www = en)
RewriteCond %{HTTP_HOST} ^(www|nl|es).mydomain.com$
RewriteRule ^(.*)$ mydomain.com/%1/$1 [L]

#subdomain to folder (members. => /members/, files. => /files/, etc)
RewriteCond %{HTTP_HOST} ^(.*).mydomain.com$
RewriteCond %{HTTP_HOST} !^www.mydomain.com$
RewriteRule ^(.*)$ mydomain.com/misc/%1/$1 [L]

Очевидно, что вики-сайты на разных языках настроены на mydomain.com/www/, mydomain.com/es/ и т. Д. Это прекрасно работает. Проблема заключается во второй части, подпапках. В той же папке mydomain.com/ я создал папку misc / для хранения всех вещей misc (включая папки поддоменов). Я подумал, что просто добавив / misc / в путь (как я добавил имя языковой папки в первом правиле), он заработает ... но он выдаст ошибку 500. Ни в старой, ни в новой настройке нет строк .htaccess в любых папках, которые могут конфликтовать со вторым правилом.

Может кто-нибудь заметить ошибку или подсказать, как систематически проверять эту настройку на наличие ошибок?

1 Ответ

2 голосов
/ 24 августа 2010

Самый простой способ предотвратить цикл перенаправления, который, как я считаю, происходит, - это просто проверить, переписали ли вы URL-адрес туда, куда вы его намеревались.Мы можем сделать это несколькими разными способами;если вы знаете, что файл будет существовать после того, как вы переписали его, вы можете, например, указать %{REQUEST_FILENAME} !-f.

В вашем случае, поскольку вы переписываете все в общую папку в вашем /public_html каталог, мы можем просто проверить, если это уже было сделано:

#to the right language folder (www = en)
RewriteCond %{HTTP_HOST} ^(www|nl|es)\.example\.com$
RewriteCond %{REQUEST_URI} !^/example\.com
RewriteRule ^(.*)$ example.com/%1/$1 [L]

#subdomain to folder (members. => /members/, files. => /files/, etc)
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteCond %{REQUEST_URI} !^/example\.com
RewriteRule ^(.*)$ example.com/misc/%1/$1 [L]

По общему признанию, я не уверен, почему у вас сейчас проблемы, но не было раньше.Я запустил ваш исходный набор правил на тестовом сервере и в результате обнаружил внутреннюю ошибку сервера из-за слишком большого количества внутренних перенаправлений, поэтому в нашей настройке должны быть различия.В любом случае, надеюсь, это поможет вам.

...