2013-07-01 1 views
1

Попытка установить замечательную систему Concrete5 CMS для использования в качестве основного механизма сайта - проблема в том, что у нее около 15 различных файлов и каталогов, и они загромождают мой корень. Я бы очень хотел переместить его в подкаталог /_concrete/ и все еще поддерживать его в корне домена..htaccess - псевдоним всех запросов www-only в подкаталог

htaccess никогда не был моим сильным костюмом - после большого количества исследований и обучения, и много ошибок 500, мое разочарование отменяет мою гордость, и я публикую здесь. Вот именно то, что я пытаюсь выполнить:

  • Любые запросы, которые приходят через www.domain.com направляются www.domain.com/_concrete/, кроме как в случае существующего файла.
  • Конечный пользователь не должен изменить - они по-прежнему будут видеть сайт как www.domain.com, даже если они обслуживаются www.domain.com/_concrete/.
  • Несколько поддоменов существуют на этом сайте в качестве подпапок внутри корня - таким образом, должны быть перенаправлены только запросы, поступающие через www.domain.com.

Вот ближе я с моим Htaccess, который выдает ошибку 500:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !^_concrete 
RewriteRule ^(.*)$ _concrete/$1 [L,QSA] 

Это является результатом 4 часа пота и крови (в основном кровь), так что я должен быть рядом , Я надеюсь, что один из ваших прекрасных умов может указать на глупую ошибку и быстро поставить эту вещь. Спасибо за ваше время!


Добавление: Я ранее писал .htaccess - alias domain root to subfolder некоторое время назад, что заставило меня начать. Пожалуйста, не попадайте в ловушку, думая, что это дубликат.

ответ

1

проблема внутреннего контура Перенаправление, %{REQUEST_FILENAME} содержит абсолютный системный путь к файлу (/ дом/пользователь/...) не Url Путь, ваше третье условие состоит в том, что система путь к запрашиваемым начала файла с _concrete, который никогда не будет правдой.

воспроизвести то, что происходит, скажем, например, делается запрос на /contact (который не является файлом): URL, передать все условия переопределения и запрос быть внутренне перенаправлены на /_concrete/contact, теперь mod_rewrite будет повторно выполнять в HTAccess снова (L флаг STO только текущий пробег, если URL-адрес был изменен, правила будут применяться снова к новому URL)

так, новый URL /_concrete/contact также будет проходить все условия и переписать /_concrete/_concrete/contact и так далее. .. , который будет генерировать цикл перенаправления, и Apache выдаст сообщение об ошибке 500

, чтобы решить эту проблему, вы должны изменить свое третье условие с:

RewriteCond %{REQUEST_URI} !^/_concrete 
+0

Красивыми - Я хотел бы принять это дважды. Ты избавил меня от такой боли. Ура! – CodeMoose

+0

рад, что это помогает, я добавил некоторые объяснения, чтобы укрепить ваш костюм :) –

Смежные вопросы