IIS7上的Joomla搜索引擎友好URL问题

时间:2009-03-01 03:21:03

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

我在vista 64开发盒上运行了使用php 5.2.8,IIS7上的mySQL 5.1.31的Joomla 1.5.9。我有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”开始,只是为了简单起见。

另外,我还没有域名,所以我使用hosts文件别名来访问该站点。我不希望任何人经历这样的麻烦来回答我的问题,所以我只是描述这个问题,并希望我做得足够好,人们可以理解发生了什么。出于此问题的目的,我将使用http://nodomainyet.com/joomla156_mx作为基本URL(即joomla主页)。是的,这确实意味着Joomla安装在一个子目录中 - 我不确定这是否是一个问题(这在我的开发盒上不是问题)。

关于问题。

启用“搜索引擎友好网址”会导致http://nodomainyet.com/joomla156_mx生成404(“未找到组件”)。在404错误页面中有一个链接转到http://nodomainyet.com/joomla156_mx/index.php - 该链接有效。如果我关闭“搜索引擎友好网址”,则http://nodomainyet.com/joomla156_mxhttp://nodomainyet.com/joomla156_mx/index.php都有效。因此,启用“搜索引擎友好网址”会导致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和重写规则......我不确定什么可能导致它出错。< / p>


更新 - 2009-03-03

我想也许从(“使用Apache mod_rewrite”)打开第一个搜索引擎优化设置(“搜索引擎友好网址”)可能是一个坏主意(即使我可以打开“搜索引擎友好网址”)本身在我的本地机器上,它工作正常)。所以我尝试了几个实验

我想也许问题是在主机上的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>

(即,将目录名称添加到条件和操作之前)。这并没有什么不同。现在,我对重写规则完全不熟悉,所以我可能搞砸了。

我想我觉得没有重定向规则有点可疑;意思是如果我复制&amp;粘贴一个“重写”的URL,是不是必须告诉服务器这是一个虚构的URL,它应该被重定向到真正的URL?但是,再一次,这一切都在我的本地方框上运行正常,只有简单的旧重写规则,所以我可能会在错误的树上吠叫。

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

此页面的最后一步是Enabling Search Engine Friendly URLs

  

默认情况下,Joomla使用查询字符串   它的所有链接的参数   为您的网站生成。这个   可以通过启用来更改行为   什么叫做“搜索引擎友好   URL“在Joomla中。但是,此功能   依赖于URL重写   功能可用   网络服务器。 IIS 6.0没有URL   重写功能,所以你可以   使用第三方网址之一   重写产品,如   ISAPI_Rewrite或Ionics ISAPI重写   过滤。 IIS 7.0具有URL重写功能   支持,可以通过启用   安装Microsoft URL重写   IIS 7.0的模块。下列   说明描述了URL重写的方式   可以使用IIS 7.0的模块   在Joomla中启用干净的URL   首先,您需要下载并安装Microsoft URL重写模块。安装完成后,创建并打开位于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管理员控制台。登录后,转到网站 - &gt;全局配置菜单配置SEO设置如下:

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

    答案 1 :(得分:2)

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

    使用CGI或ISAPI有什么问题?它们都与php变量_SERVER [“REQUEST_URI”]有问题,这是joomla SEO使用的。

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

    答案 2 :(得分:0)

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

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

    由于以下原因,您可能无法访问此页面:

    过时的书签/收藏 搜索引擎,其中包含此网站的过期列表 一个错误的地址 您无法访问此页面 找不到请求的资源。 处理您的请求时出错。 请尝试以下页面之一:

    主页

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

    我无能为力

    此致 Kislay

    答案 3 :(得分:0)

    我不确定这是否已被覆盖,我看了,但我很不错。

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

    这应解决404问题。