关于IIS7的Joomla搜索引擎友好URL问题
我让Joomla 1.5.9在Vista64开发设备的IIS7上运行PHP5.2.8和mySQL 5.1.31。我有两个SEO设置“搜索引擎友好的URL”和“使用Apache mod_重写”工作正常 我还在建立一个托管网站(www.mochahosting.com)。他们使用同一软件的稍旧版本:Joomla 1.5.5、PHP5.2.6、mySQL 5.0.4x。他们也使用IIS7,但运行在Windows 32上 我无法在托管站点上使用任何一个SEO设置(我已经在本地机器上使用了SEO设置,配置基本相同)。让我们从“搜索引擎友好URL”开始,只是为了简单起见 另外,我还没有域名,所以我使用主机文件别名访问该站点。我不希望有人会费尽心机来回答我的问题,所以我只想描述一下这个问题,希望我做得足够好,让人们能够理解到底发生了什么。为了回答这个问题,我将使用joomla主页作为基本URL。是的,这确实意味着Joomla安装在一个子目录中——我不确定这是否是一个问题(在我的开发环境中不是问题) 关于这个问题 打开“搜索引擎友好URL”会导致生成404(“未找到组件”)。在404错误页面中,有一个指向的链接,该链接有效。如果我关闭“搜索引擎友好URL”,那么两者都可以工作。因此,似乎打开“搜索引擎友好URL”会导致的“自动重定向”停止工作 现在,如果我在那里来回导航到各种主菜单链接(我只使用默认的joomla站点,该站点安装了一个新的joomla实例),那么一切正常。它只是去了,那是行不通的。值得注意的是,主菜单中的“主页”链接默认设置为 我已经将主机上phpinfo的输出与我的dev box的输出进行了比较,没有发现任何可能导致此问题的差异 打开第二个SEO设置--“使用Apache mod_rewrite”--并不能解决问题(人们可能会认为它可能会解决问题,因为该设置的目的是在URL中去掉index.php) “搜索引擎友好的URL”通常看起来很简单——它不需要web.config和重写规则。。。我不确定是什么可能导致它出错关于IIS7的Joomla搜索引擎友好URL问题,iis,iis-7,seo,joomla,friendly-url,Iis,Iis 7,Seo,Joomla,Friendly Url,我让Joomla 1.5.9在Vista64开发设备的IIS7上运行PHP5.2.8和mySQL 5.1.31。我有两个SEO设置“搜索引擎友好的URL”和“使用Apache mod_重写”工作正常 我还在建立一个托管网站(www.mochahosting.com)。他们使用同一软件的稍旧版本:Joomla 1.5.5、PHP5.2.6、mySQL 5.0.4x。他们也使用IIS7,但运行在Windows 32上 我无法在托管站点上使用任何一个SEO设置(我已经在本地机器上使用了SEO设置,配置
更新-2009-03-03 我认为只打开(“使用Apache mod_rewrite”)中的第一个SEO设置(“搜索引擎友好URL”)可能是个坏主意(尽管我可以在本地机器上自己打开“搜索引擎友好URL”,而且效果很好)。所以我又做了一些实验 我想问题可能是主机上的IIS7没有正确设置URL重写。我做了中描述的(第一个)测试文件,它成功了——这意味着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>
到
(即,在条件和操作前加上目录名)。那没什么区别。现在,我是一个全新的改写规则的人,所以我可能把事情搞砸了
我想我觉得没有重定向规则有点可疑;也就是说,如果我复制并粘贴一个“重写”的URL,难道不需要告诉服务器这是一个虚构的URL,并且应该重定向到一个真实的URL吗?但是,再一次,在我的本地盒子上,用简单的旧重写规则,这一切都很好,所以我可能找错了方向
谢谢你的帮助 本页最后的步骤将逐步完成 默认情况下,Joomla使用查询字符串 它包含的所有链接URL的参数 为您的网站生成。这 可以通过启用 什么叫“搜索引擎友好型” 在Joomla中的“URL”。但是,这个特性 依赖于URL重写 要在上提供的功能 网络服务器。IIS 6.0没有URL 重写功能,因此您可以 使用第三方URL之一 重写产品,例如 ISAPI_重写或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代码粘贴到此文件中。
. 登录后,转到站点-->全局配置菜单配置SEO设置,如下所示:
搜索引擎友好URL-是
使用Apache mod_重写-是
为URL添加后缀-否
单击“应用”保存配置,然后浏览到。您将看到,现在Joomla页面中的所有链接都有没有查询字符串参数的URL,如果您单击这些链接中的任何一个,服务器将返回正确的响应:问题在于托管公司没有使用FastCGI来运行php。即使它在运行phpinfo()时说“serverapi=CGI/FastCGI”,也可以
<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>
<?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="(\<|%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>