代码之家  ›  专栏  ›  技术社区  ›  Jimmy

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

  •  3
  • Jimmy  · 技术社区  · 17 年前

    我让Joomla 1.5.9在Vista64开发设备的IIS7上运行PHP5.2.8和mySQL 5.1.31。我有两个SEO设置“搜索引擎友好的URL”和“使用Apache mod_重写”工作正常。

    我不能让任何一个搜索引擎优化设置工作 在托管站点上

    http://nodomainyet.com/joomla156_mx

    打开“搜索引擎友好URL”会导致 http://nodomainyet.com/joomla156_mx http://nodomainyet.com/joomla156_mx/index.php --这种联系是有效的。如果我关闭“搜索引擎友好URL”,那么两者都是 http://nodomainyet.com/joomla156_mx 工作因此,似乎打开“搜索引擎友好的URL”会导致“自动重定向” 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的输出与我的dev box的输出进行了比较,没有发现任何可能导致此问题的差异。。。

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

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


    我认为只打开(“使用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 回复  |  直到 17 年前
        1
  •  2
  •   notandy    17 年前

    本页的最后几步将逐步完成 Enabling Search Engine Friendly URLs .

    默认情况下,Joomla使用查询字符串 为您的网站生成。这 可以通过启用 但是,这个特性 依赖于URL重写 要在上提供的功能 重写功能,因此您可以 使用第三方URL之一 重写产品,例如 支持,可通过以下方式启用: 安装Microsoft URL重写 IIS 7.0的模块。以下 说明描述了如何重写URL IIS 7.0的模块可用于 在Joomla中启用干净的URL。

    <?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浏览器并登录到位于的Joomla管理员控制台 http://localhost/joomla/administrator/

  • 搜索引擎友好URL-是
  • 使用Apache mod_重写-是
  • 为URL添加后缀-否
  • 单击“应用”保存配置,然后浏览到 http://localhost/joomla/
        2
  •  2
  •   Community Mohan Dere    9 年前

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

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

        3
  •  0
  •   kislay    16 年前

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

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

    过期的书签/收藏夹 输入错误的地址 您无权访问此页面 找不到请求的资源。 处理您的请求时出错。 请尝试以下页面之一:

    我不知所措

    当做 基斯利

        4
  •  0
  •   Dan    16 年前

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

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

    这应该可以解决404问题。