我在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_mx和http://nodomainyet.com/joomla156_mx/index.php都有效。因此,启用“搜索引擎友好网址”会导致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这不起作用。值得注意的是,默认情况下,主菜单中的“主页”链接会转到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?但是,再一次,这一切都在我的本地方框上运行正常,只有简单的旧重写规则,所以我可能会在错误的树上吠叫。
感谢您的帮助!
答案 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="(\<|%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设置如下:
答案 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问题。