У меня Joomla 1.5.9 работает с php 5.2.8, mySQL 5.1.31 на IIS7 на Vista Vista. У меня есть настройки SEO "URL-адреса, удобные для поисковых систем" и "Использовать Apache mod_rewrite", которые работают правильно.
Я также настраиваю размещенный сайт (с www.mochahosting.com). Они используют несколько более старые версии того же программного обеспечения: Joomla 1.5.5, php 5.2.6, mySQL 5.0.4x. Они также используют IIS7, но работают на Windows 32.
Я не могу заставить работать любые настройки SEO на размещенном сайте (я получил настройки SEO для работы на моей локальной машине, с почти такой же конфигурацией). Давайте начнем с «Дружественных поисковикам URL» только для простоты.
Кроме того, у меня еще нет доменного имени, поэтому я использую псевдоним хост-файла, чтобы попасть на сайт. Я не ожидаю, что кто-нибудь преодолеет эту проблему, чтобы ответить на мой вопрос, поэтому я просто опишу проблему и надеюсь, что я проделал достаточно хорошую работу, чтобы люди могли понять, что происходит. Для этого вопроса я буду использовать http://nodomainyet.com/joomla156_mx в качестве базового URL-адреса (т. Е. Домашней страницы joomla). Да, это означает, что Joomla установлена в подкаталоге - я не уверен, является ли это проблемой или нет (это не проблема на моем устройстве dev).
К проблеме.
Включение «Дружественных поисковой системе URL» приводит к тому, что http://nodomainyet.com/joomla156_mx генерирует 404 («Компонент не найден»). На странице ошибки 404 есть ссылка, которая ведет на http://nodomainyet.com/joomla156_mx/index.php - и эта ссылка работает. Если я отключу «URL-адреса, дружественные поисковой системе», тогда будут работать http://nodomainyet.com/joomla156_mx и http://nodomainyet.com/joomla156_mx/index.php. Таким образом, кажется, что включение «Дружественных поисковой системе URL» приводит к тому, что «автоматическое перенаправление» с http://nodomainyet.com/joomla156_mx на http://nodomainyet.com/joomla156_mx/index.php перестает работать ...
Теперь, если я перейду к http://nodomainyet.com/joomla156_mx/index.php и оттуда перейду к различным ссылкам главного меню (я использую только сайт joomla по умолчанию, который устанавливается с новым экземпляром Joomla), тогда все работает нормально. Это просто собирается http://nodomainyet.com/joomla156_mx, который не работает. Стоит отметить, что ссылка «home», которая находится в главном меню, переходит на http://nodomainyet.com/joomla156_mx по умолчанию.
Я сравнил вывод phpinfo на хосте с выводом моего dev-бокса и не увидел различий, которые могли бы вызвать эту проблему ...
Включение второго параметра SEO - «Использовать Apache mod_rewrite» - не решает проблему (можно было бы подумать, что это возможно, поскольку целью этого параметра является избавление от index.php в URL).
"Дружественные поисковикам URL" обычно кажутся довольно тривиальными, чтобы приступить к работе - для этого не требуется web.config и правила перезаписи ... Я не уверен, что может привести к тому, что он пойдет не так.
Обновление - 2009-03-03
Я подумал, что может быть плохой идеей было включить только первый параметр SEO («URL-адреса, дружественные поисковой системе») из («Использовать Apache mod_rewrite») (хотя я могу просто включить «URL-адреса, дружественные поисковой системе», сама на моей локальной машине и работает нормально). Поэтому я попробовал еще несколько экспериментов
Я подумал, что, возможно, проблема в том, что перезапись URL не была правильно настроена в IIS7 на хосте. Я сделал (первый) тестовый файл, описанный в http://learn.iis.net/page.aspx/461/creating-rewrite-rules-for-the-url-rewrite-module, и это сработало - значит, перезапись URL работает.
Тогда я подумал, что, возможно, проблема в том, что правила перезаписи, которые можно увидеть везде для Joomla на IIS7, необходимо переписать, чтобы учесть подкаталог. Как я уже говорил выше, настройки SEO работают нормально на моей локальной машине. Joomla также установлена в подкаталоге, и все работает нормально. Тем не менее я попытался изменить правило перезаписи с
<rewrite>
<rules>
<rule name="Imported Rule 1" enabled="true">
<match url="(.*)" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />
<add input="{SCRIPT_NAME}" negate="true" pattern="^/index.php" ignoreCase="false" />
<add input="{SCRIPT_NAME}" pattern="(/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
до
<rewrite>
<rules>
<rule name="Imported Rule 1" enabled="true">
<match url="(.*)" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />
<add input="{SCRIPT_NAME}" negate="true" pattern="^/joomla156mx/index.php" ignoreCase="false" />
<add input="{SCRIPT_NAME}" pattern="(/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$" />
</conditions>
<action type="Rewrite" url="joomla156mx/index.php" />
</rule>
</rules>
</rewrite>
(т. Е. Добавление имени каталога к условию и действию). Это не имело значения. Теперь я совершенно новичок в переписывании правил, поэтому я мог что-то напортачить.
Полагаю, мне кажется подозрительным, что нет правила перенаправления; это означает, что если я копирую и вставляю «переписанный» URL, разве что-то не должно сообщать серверу, что это готовый URL, и его следует перенаправить на реальный URL? Но, опять же, все это нормально работает на моем локальном компьютере с простыми старыми правилами перезаписи, поэтому я могу лаять не на то дерево.
Спасибо за помощь!