3

我在 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?但是,再一次,这一切都在我的本地机器上运行良好,使用普通的旧重写规则,所以我可能在错误的树上吠叫。

谢谢您的帮助!

4

4 回答 4

2

本页的最后一步是启用搜索引擎友好 URL

默认情况下,Joomla 对它为您的网站生成的所有链接 URL 使用查询字符串参数。可以通过在 Joomla 中启用所谓的“搜索引擎友好 URL”来更改此行为。但是,此功能依赖于 Web 服务器上可用的 URL 重写功能。IIS 6.0 没有 URL 重写功能,因此您可以使用第三方 URL 重写产品之一,例如 ISAPI_Rewrite 或 Ionics ISAPI Rewrite Filter。IIS 7.0 支持 URL 重写,可以通过安装 Microsoft URL Rewrite Module for IIS 7.0 来启用。以下说明描述了如何使用 IIS 7.0 的 URL 重写模块在 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,如果您单击这些链接中的任何一个,服务器将返回正确的响应:

    于 2009-03-03T04:16:59.240 回答
    2

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

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

    请参阅我的另一个问题,了解如何确定是否使用了 FastCGI:如何确定是否使用 FastCGI 运行 php 脚本

    于 2009-03-17T01:03:56.027 回答
    0

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

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

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

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

    主页

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

    我一无所知

    问候基斯莱

    于 2009-07-24T22:50:47.673 回答
    0

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

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

    这应该可以解决 404 问题。

    于 2010-04-01T20:37:10.313 回答