【问题标题】:Joomla Search Engine Friendly URLs issue on IIS7IIS7 上的 Joomla 搜索引擎友好 URL 问题
【发布时间】:2010-10-10 14:17:26
【问题描述】:

我在 vista 64 开发盒上的 IIS7 上运行 Joomla 1.5.9 和 php 5.2.8、mySQL 5.1.31。我的 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 安装在一个子目录中——我不确定这是否是一个问题(这不是我的开发盒的问题)。

解决问题。

启用“搜索引擎友好 URL”会导致 http://nodomainyet.com/joomla156_mx 生成 404(“找不到组件”)。在 404 错误页面中,有一个指向 http://nodomainyet.com/joomla156_mx/index.php 的链接——该链接有效。如果我关闭“搜索引擎友好 URL”,那么 http://nodomainyet.com/joomla156_mxhttp://nodomainyet.com/joomla156_mx/index.php 都可以工作。因此,似乎打开“搜索引擎友好 URL”会导致 http://nodomainyet.com/joomla156_mxhttp://nodomainyet.com/joomla156_mx/index.php 的“自动重定向”停止工作......

现在,如果我转到 http://nodomainyet.com/joomla156_mx/index.php 并从那里导航到各种主菜单链接(我只使用安装了新 Joomla 实例的默认 joomla 站点),那么一切正常。它只是去http://nodomainyet.com/joomla156_mx 不起作用。值得注意的是,主菜单中的“主页”链接默认为http://nodomainyet.com/joomla156_mx

我已经将主机上 phpinfo 的输出与我的开发箱的输出进行了比较,看不到任何会导致此问题的差异...

打开第二个 SEO 设置 - “使用 Apache mod_rewrite” - 并不能解决问题(人们会认为它可能,因为该设置的目的是摆脱 URL 中的 index.php)。

“搜索引擎友好的 URL”通常看起来很简单——它不需要 web.config 和重写规则......我不确定是什么可能导致它出错。


更新 - 2009-03-03

我认为只从(“使用 Apache mod_rewrite”)打开第一个 SEO 设置(“搜索引擎友好 URL”)可能是个坏主意(即使我可以通过打开“搜索引擎友好 URL”)本身在我的本地机器上,它工作正常)。所以我又尝试了一些实验

我认为问题可能是在主机上的 IIS7 中未正确设置 URL 重写。我做了http://learn.iis.net/page.aspx/461/creating-rewrite-rules-for-the-url-rewrite-module 中描述的(第一个)测试文件,并且成功了——这意味着 URL 重写正在工作。

然后我认为问题可能在于人们在 IIS7 上随处可见的 Joomla 重写规则需要重写以考虑子目录。就像我上面说的,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?但是,再一次,这一切都在我的本地盒子上运行良好,使用普通的旧重写规则,所以我可能是在错误的树上吠叫。

感谢您的帮助!

【问题讨论】:

    标签: iis iis-7 seo joomla friendly-url


    【解决方案1】:

    此页面上的最后一步遍历Enabling Search Engine Friendly URLs

    Joomla 默认使用查询字符串 所有链接 URL 的参数 为您的网站生成。这 行为可以通过启用来改变 什么叫做“搜索引擎友好 网址”在 Joomla 中。但是,此功能 依赖于 URL 重写 可用的功能 网络服务器。 IIS 6.0 没有 URL 重写能力,所以你可以 使用第三方 URL 之一 重写产品,例如 ISAPI_Rewrite 或 Ionics ISAPI 重写 筛选。 IIS 7.0 具有 URL 重写 支持,可以通过 安装 Microsoft URL 重写 IIS 7.0 的模块。下列 说明描述了如何重写 URL IIS 7.0 模块可用于 在 Joomla 中启用清理 URL。
    首先,您需要下载并安装 Microsoft URL Rewrite Module。安装后,创建并打开位于 C:\inetpub\wwwroot\Joomla 文件夹中的 web.config 文件。将以下 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 文件,然后打开 Web 浏览器并在 http://localhost/joomla/administrator/ 登录到 Joomla 管理员控制台。登录后,转到站点 --> 全局配置菜单,配置 SEO 设置如下:

  • 搜索引擎友好的 URL - 是
  • 使用 Apache mod_rewrite - 是
  • 为 URL 添加后缀 - 否
  • 单击“应用”保存配置,然后浏览至http://localhost/joomla/。您将看到现在 Joomla 页面中的所有链接都有没有查询字符串参数的 URL,如果您单击这些链接中的任何一个,服务器将返回正确的响应:

    【讨论】:

    • 感谢您的回答。但是,我已经在本地机器和托管站点上遵循了类似的说明;它在我的本地机器上运行,但不在托管站点上......所以我需要更多关于如何在托管站点上诊断它的详细信息。
    【解决方案2】:

    原来问题在于托管公司没有使用 FastCGI 来运行 php。即使在运行 phpinfo() 时显示“Server API = CGI/FastCGI”,也不足以保证正在使用 fastcgi。

    使用 CGI 或 ISAPI 有什么问题?他们都存在 joomla SEO 使用的 php 变量 _SERVER["REQUEST_URI"] 的问题。

    请参阅我的另一个问题,了解如何确定是否使用了 FastCGI:How to know for sure if FastCGI is being used to run php scripts

    【讨论】:

      【解决方案3】:

      我有一个网站 www.carooolglobal.com,所有功能都可以正常工作,所有 SEO 设置都设置为否。

      如果我将任何 SEO 设置设置为是,并从主页左侧的搜索表单执行搜索,它会在 index.php 上正确显示结果。但是当我单击搜索结果中的名称链接时,它应该在弹出窗口中打开该人的个人资料,但弹出窗口显示

      您可能无法访问此页面,因为:

      过时的书签/收藏夹 具有此站点过时列表的搜索引擎 输入错误的地址 您无权访问此页面 未找到请求的资源。 处理您的请求时发生错误。 请尝试以下页面之一:

      首页

      如果问题仍然存在,请联系本网站的系统管理员。

      我一无所知

      问候 基斯莱

      【讨论】:

        【解决方案4】:

        我不确定这是否已经涵盖了,我看过但我很好地错过了一些东西。

        如果您的搜索引擎友好链接有问题,请进入安装 joomla 的文件夹,并将您的 htaccess.txt 文件重命名为 .htaccess

        这应该可以解决 404 问题。

        【讨论】:

        • .htaccess 未被 IIS7 使用
        猜你喜欢
        • 2011-08-31
        • 2021-06-12
        • 2012-02-24
        • 2013-10-16
        • 2014-11-09
        • 2012-06-18
        • 2010-12-11
        • 2014-03-10
        • 2011-12-24
        相关资源
        最近更新 更多