Проблема с дружественными поисковыми системами Joomla на IIS7 - PullRequest
3 голосов
/ 01 марта 2009

У меня 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? Но, опять же, все это нормально работает на моем локальном компьютере с простыми старыми правилами перезаписи, поэтому я могу лаять не на то дерево.

Спасибо за помощь!

Ответы [ 4 ]

2 голосов
/ 17 марта 2009

Оказывается, проблема в том, что хостинговая компания не использовала FastCGI для запуска php. Даже если при запуске phpinfo () написано «Server API = CGI / FastCGI», это НЕ ДОЛЖНО гарантировать, что fastcgi используется.

Что не так с использованием CGI или ISAPI? У них обоих есть проблемы с переменной php _SERVER ["REQUEST_URI"], которую использует Joomla SEO.

Смотрите мой другой вопрос, чтобы узнать, как точно определить, используется ли FastCGI или нет: Как точно узнать, используется ли FastCGI для запуска сценариев php

2 голосов
/ 03 марта 2009

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

По умолчанию Joomla использует строку запроса параметры для всех ссылок URL это генерирует для вашего веб-сайта. это поведение можно изменить, включив что называется "Поисковая система URLs "в Joomla. Однако эта функция полагается на переписывание URL функциональность будет доступна на веб сервер. IIS 6.0 не имеет URL возможности переписывания, чтобы вы могли используйте один из сторонних URL переписывая продукты, такие как ISAPI_Rewrite или Ionics ISAPI Rewrite Фильтр. IIS 7.0 имеет переписывание URL поддержка, которая может быть включена установка Microsoft URL Rewrite Модуль для IIS 7.0. Следующие инструкции описывают, как переписать URL Модуль для IIS 7.0 может быть использован для включить чистые URL в Joomla.
Сначала вам нужно скачать и установить модуль перезаписи URL-адресов Microsoft. После установки создайте и откройте файл web.config, расположенный в папке C: \ inetpub \ wwwroot \ Joomla. Вставьте следующий XML-код в этот файл.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Security Rule" stopProcessing="true">
          <match url="^(.*)$" ignoreCase="false" />
          <conditions logicalGrouping="MatchAny">
            <add input="{QUERY_STRING}" pattern="mosConfig_[a-zA-Z_]{1,21}(=|\%3D)" ignoreCase="false" />
            <add input="{QUERY_STRING}" pattern="base64_encode.*\(.*\)" ignoreCase="false" />
            <add input="{QUERY_STRING}" pattern="(\&lt;|%3C).*script.*(\>|%3E)" />
            <add input="{QUERY_STRING}" pattern="GLOBALS(=|\[|\%[0-9A-Z]{0,2})" ignoreCase="false" />
            <add input="{QUERY_STRING}" pattern="_REQUEST(=|\[|\%[0-9A-Z]{0,2})" ignoreCase="false" />
          </conditions>
          <action type="CustomResponse" url="index.php" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
        </rule>
        <rule name="SEO Rule">
          <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="{URL}" negate="true" pattern="^/index.php" ignoreCase="false" />
            <add input="{URL}" pattern="(/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$" />
          </conditions>
          <action type="Rewrite" url="index.php" />
        </rule>
      </rules>
    </rewrite>
 </system.webServer>
</configuration>

Сохраните файл web.config, а затем откройте веб-браузер и войдите в консоль администратора Joomla по адресу http://localhost/joomla/administrator/. После входа перейдите в меню «Сайт» -> «Глобальная конфигурация» и настройте параметры SEO следующим образом:

URL-адреса, удобные для поисковых систем - Да Использовать Apache mod_rewrite - Да Добавить суффикс к URL - нет Сохраните конфигурацию, нажав «Применить», а затем перейдите к http://localhost/joomla/. Вы увидите, что теперь все ссылки на страницах Joomla имеют URL-адреса без параметров строки запроса, и если вы нажмете на любую из этих ссылок, сервер вернет правильный ответ:
0 голосов
/ 02 апреля 2010

Я не уверен, что это уже было покрыто, я посмотрел, но я хорошо пропускаю вещи.

Если у вас возникли проблемы с дружественными ссылками для поисковых систем, перейдите в папку, в которой установлен joomla, и переименуйте файл htaccess.txt в .htaccess

Это должно решить проблему 404.

0 голосов
/ 25 июля 2009

У меня есть веб-сайт www.carooolglobal.com, все функции работают нормально со всеми настройками SEO, установленными на Нет.

Если я установил для какого-либо из параметров SEO значение Да и выполнил поиск из поисковой формы слева на главной странице, он правильно отображает результаты на index.php. Но когда я нажимаю на ссылку имени из результата поиска , это должно открыть профиль человека во всплывающем окне, но всплывающее окно показывает

Возможно, вы не сможете посетить эту страницу из-за:

устаревшая закладка / избранное поисковая система, которая имеет устаревший список для этого сайта неверный адрес у вас нет доступа к этой странице Запрашиваемый ресурс не найден. Произошла ошибка при обработке вашего запроса. Пожалуйста, попробуйте одну из следующих страниц:

Домашняя страница

Если трудности сохраняются, обратитесь к системному администратору этого сайта.

Я не в курсе

С уважением Kislay

...