Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redirect Joomla网站正在获得303重定向循环_Redirect_Joomla - Fatal编程技术网

Redirect Joomla网站正在获得303重定向循环

Redirect Joomla网站正在获得303重定向循环,redirect,joomla,Redirect,Joomla,我的网站有时会在主页上出现303重定向循环。这给了我一个错误,当我试图查看该网站的网页有一个重定向循环,但大多数时间是罚款。但是,303重定向看起来不适合搜索引擎优化。我正在使用Zo2框架运行Joomla3.2.3。我使用了firefox live http headers工具,它显示了以下内容: HTTP/1.1 303 See other Date: Sat, 19 Apr 2014 06:42:44 GMT Server: Apache mod_fcgid/2.3.10-dev X-Pow

我的网站有时会在主页上出现303重定向循环。这给了我一个错误,当我试图查看该网站的网页有一个重定向循环,但大多数时间是罚款。但是,303重定向看起来不适合搜索引擎优化。我正在使用Zo2框架运行Joomla3.2.3。我使用了firefox live http headers工具,它显示了以下内容:

HTTP/1.1 303 See other
Date: Sat, 19 Apr 2014 06:42:44 GMT
Server: Apache mod_fcgid/2.3.10-dev
X-Powered-By: PHP/5.4.26
Set-Cookie: 81f5073a1f9d10dc244e07c98216335e=hb7mb5k3v0vftstcgtdbonikq6; path=/;         HttpOnly
Location: /
Cache-Control: max-age=600
Expires: Sat, 19 Apr 2014 06:52:44 GMT
Content-Length: 0
Keep-Alive: timeout=5
Connection: Keep-Alive
我逐一检查并禁用了Joomla中的每个插件,当我禁用Zo2框架插件时,303重定向就消失了。我在他们的论坛上问过,他们都没能帮我。所以,我在zo2插件目录中的所有文件中搜索了redirect这个词,这就是我找到的

这两个在site.megamenu.js中

!function ($) {
    $(document).ready(function ($) {
        // when clicking on menu
        redirect();
        var duration = 0;
        var $parent = $('.zo2-megamenu');
        var hover_type = $parent.data('hover');
        if ($parent.data('duration')) {
            duration = $parent.data('duration');
        }

function redirect() {
    $('.dropdown-toggle').on('click',function(e){
        if($(this).parent().hasClass('open') && this.href && this.href != '#'){
            window.location.href = this.href;
            e.preventDefault();
        }
    });
}
我有其他网站在这个服务器上运行,使用相同的.htaccess和php.ini文件,所以我认为这可能不是问题,因为他们没有得到重定向。如果能帮上忙,我将不胜感激。该网站是

application.php

public function redirect($url, $msg = '', $msgType = 'message', $moved = false)
    {
        // Check for relative internal links.
        if (preg_match('#^index2?\.php#', $url))
        {
            $url = JUri::base() . $url;
        }

        // Strip out any line breaks.
        $url = preg_split("/[\r\n]/", $url);
        $url = $url[0];

        /*
         * If we don't start with a http we need to fix this before we proceed.
         * We could validly start with something else (e.g. ftp), though this would
         * be unlikely and isn't supported by this API.
         */
        if (!preg_match('#^http#i', $url))
        {
            $uri = JUri::getInstance();
            $prefix = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port'));

            if ($url[0] == '/')
            {
                // We just need the prefix since we have a path relative to the root.
                $url = $prefix . $url;
            }
            else
            {
                // It's relative to where we are now, so lets add that.
                $parts = explode('/', $uri->toString(array('path')));
                array_pop($parts);
                $path = implode('/', $parts) . '/';
                $url = $prefix . $path . $url;
            }
        }

        // If the message exists, enqueue it.
        if (trim($msg))
        {
            $this->enqueueMessage($msg, $msgType);
        }

        // Persist messages if they exist.
        if (count($this->_messageQueue))
        {
            $session = JFactory::getSession();
            $session->set('application.queue', $this->_messageQueue);
        }

        // If the headers have been sent, then we cannot send an additional location header
        // so we will output a javascript redirect statement.
        if (headers_sent())
        {
            echo "<script>document.location.href='" . str_replace("'", "&apos;", $url) . "';</script>\n";
        }
        else
        {
            $document = JFactory::getDocument();

            jimport('phputf8.utils.ascii');

            if (($this->client->engine == JApplicationWebClient::TRIDENT) && !utf8_is_ascii($url))
            {
                // MSIE type browser and/or server cause issues when url contains utf8 character,so use a javascript redirect method
                echo '<html><head><meta http-equiv="content-type" content="text/html; charset=' . $document->getCharset() . '" />'
                    . '<script>document.location.href=\'' . str_replace("'", "&apos;", $url) . '\';</script></head></html>';
            }
            else
            {
                // All other browsers, use the more efficient HTTP header method
                header($moved ? 'HTTP/1.1 301 Moved Permanently' : 'HTTP/1.1 303 See other');
                header('Location: ' . $url);
                header('Content-Type: text/html; charset=' . $document->getCharset());
            }
        }

        $this->close();
    }
web.php

public function redirect($url, $moved = false)
{
    // Import library dependencies.
    jimport('phputf8.utils.ascii');

    // Check for relative internal links.
    if (preg_match('#^index\.php#', $url))
    {
        // We changed this from "$this->get('uri.base.full') . $url" due to the inability to run the system tests with the original code
        $url = JUri::base() . $url;
    }

    // Perform a basic sanity check to make sure we don't have any CRLF garbage.
    $url = preg_split("/[\r\n]/", $url);
    $url = $url[0];

    /*
     * Here we need to check and see if the URL is relative or absolute.  Essentially, do we need to
     * prepend the URL with our base URL for a proper redirect.  The rudimentary way we are looking
     * at this is to simply check whether or not the URL string has a valid scheme or not.
     */
    if (!preg_match('#^[a-z]+\://#i', $url))
    {
        // Get a JUri instance for the requested URI.
        $uri = JUri::getInstance($this->get('uri.request'));

        // Get a base URL to prepend from the requested URI.
        $prefix = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port'));

        // We just need the prefix since we have a path relative to the root.
        if ($url[0] == '/')
        {
            $url = $prefix . $url;
        }
        // It's relative to where we are now, so lets add that.
        else
        {
            $parts = explode('/', $uri->toString(array('path')));
            array_pop($parts);
            $path = implode('/', $parts) . '/';
            $url = $prefix . $path . $url;
        }
    }

    // If the headers have already been sent we need to send the redirect statement via JavaScript.
    if ($this->checkHeadersSent())
    {
        echo "<script>document.location.href='" . str_replace("'", "&apos;", $url) . "';</script>\n";
    }
    else
    {
        // We have to use a JavaScript redirect here because MSIE doesn't play nice with utf-8 URLs.
        if (($this->client->engine == JApplicationWebClient::TRIDENT) && !utf8_is_ascii($url))
        {
            $html = '<html><head>';
            $html .= '<meta http-equiv="content-type" content="text/html; charset=' . $this->charSet . '" />';
            $html .= '<script>document.location.href=\'' . str_replace("'", "&apos;", $url) . '\';</script>';
            $html .= '</head><body></body></html>';

            echo $html;
        }
        else
        {
            // All other cases use the more efficient HTTP header for redirection.
            $this->header($moved ? 'HTTP/1.1 301 Moved Permanently' : 'HTTP/1.1 303 See other');
            $this->header('Location: ' . $url);
            $this->header('Content-Type: text/html; charset=' . $this->charSet);
        }
    }

我仍然需要一些帮助。303不一定是一个错误,根据插件的用途可能是期望的行为。我的猜测是this.href没有正确填充正确的303 url。你能发布整个JS文件吗?这样我们就可以看到这个.href被分配到哪里了?这是整个site.megamenu.JS文件。我把它加到原来的问题上。你说303不是一个错误,但它不会伤害我的网站与谷歌?澄清一下,303本身并不是一个错误。它是HTML 1.1规范的合法响应代码部分,您可以在此处阅读:。然而,您遇到的循环错误似乎是303的一个不正确的应用程序,并且很可能会导致Google出现问题。当我有时间的时候,我会查看发布的JS,看看我是否能找出问题所在。我做了更多的研究,并在第一篇文章中添加了一些额外的信息。我不知道这是否有用。
public function redirect($url, $msg = '', $msgType = 'message', $moved = false)
    {
        // Check for relative internal links.
        if (preg_match('#^index2?\.php#', $url))
        {
            $url = JUri::base() . $url;
        }

        // Strip out any line breaks.
        $url = preg_split("/[\r\n]/", $url);
        $url = $url[0];

        /*
         * If we don't start with a http we need to fix this before we proceed.
         * We could validly start with something else (e.g. ftp), though this would
         * be unlikely and isn't supported by this API.
         */
        if (!preg_match('#^http#i', $url))
        {
            $uri = JUri::getInstance();
            $prefix = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port'));

            if ($url[0] == '/')
            {
                // We just need the prefix since we have a path relative to the root.
                $url = $prefix . $url;
            }
            else
            {
                // It's relative to where we are now, so lets add that.
                $parts = explode('/', $uri->toString(array('path')));
                array_pop($parts);
                $path = implode('/', $parts) . '/';
                $url = $prefix . $path . $url;
            }
        }

        // If the message exists, enqueue it.
        if (trim($msg))
        {
            $this->enqueueMessage($msg, $msgType);
        }

        // Persist messages if they exist.
        if (count($this->_messageQueue))
        {
            $session = JFactory::getSession();
            $session->set('application.queue', $this->_messageQueue);
        }

        // If the headers have been sent, then we cannot send an additional location header
        // so we will output a javascript redirect statement.
        if (headers_sent())
        {
            echo "<script>document.location.href='" . str_replace("'", "&apos;", $url) . "';</script>\n";
        }
        else
        {
            $document = JFactory::getDocument();

            jimport('phputf8.utils.ascii');

            if (($this->client->engine == JApplicationWebClient::TRIDENT) && !utf8_is_ascii($url))
            {
                // MSIE type browser and/or server cause issues when url contains utf8 character,so use a javascript redirect method
                echo '<html><head><meta http-equiv="content-type" content="text/html; charset=' . $document->getCharset() . '" />'
                    . '<script>document.location.href=\'' . str_replace("'", "&apos;", $url) . '\';</script></head></html>';
            }
            else
            {
                // All other browsers, use the more efficient HTTP header method
                header($moved ? 'HTTP/1.1 301 Moved Permanently' : 'HTTP/1.1 303 See other');
                header('Location: ' . $url);
                header('Content-Type: text/html; charset=' . $document->getCharset());
            }
        }

        $this->close();
    }
public function redirect($url, $moved = false)
{
    // Import library dependencies.
    jimport('phputf8.utils.ascii');

    // Check for relative internal links.
    if (preg_match('#^index\.php#', $url))
    {
        // We changed this from "$this->get('uri.base.full') . $url" due to the inability to run the system tests with the original code
        $url = JUri::base() . $url;
    }

    // Perform a basic sanity check to make sure we don't have any CRLF garbage.
    $url = preg_split("/[\r\n]/", $url);
    $url = $url[0];

    /*
     * Here we need to check and see if the URL is relative or absolute.  Essentially, do we need to
     * prepend the URL with our base URL for a proper redirect.  The rudimentary way we are looking
     * at this is to simply check whether or not the URL string has a valid scheme or not.
     */
    if (!preg_match('#^[a-z]+\://#i', $url))
    {
        // Get a JUri instance for the requested URI.
        $uri = JUri::getInstance($this->get('uri.request'));

        // Get a base URL to prepend from the requested URI.
        $prefix = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port'));

        // We just need the prefix since we have a path relative to the root.
        if ($url[0] == '/')
        {
            $url = $prefix . $url;
        }
        // It's relative to where we are now, so lets add that.
        else
        {
            $parts = explode('/', $uri->toString(array('path')));
            array_pop($parts);
            $path = implode('/', $parts) . '/';
            $url = $prefix . $path . $url;
        }
    }

    // If the headers have already been sent we need to send the redirect statement via JavaScript.
    if ($this->checkHeadersSent())
    {
        echo "<script>document.location.href='" . str_replace("'", "&apos;", $url) . "';</script>\n";
    }
    else
    {
        // We have to use a JavaScript redirect here because MSIE doesn't play nice with utf-8 URLs.
        if (($this->client->engine == JApplicationWebClient::TRIDENT) && !utf8_is_ascii($url))
        {
            $html = '<html><head>';
            $html .= '<meta http-equiv="content-type" content="text/html; charset=' . $this->charSet . '" />';
            $html .= '<script>document.location.href=\'' . str_replace("'", "&apos;", $url) . '\';</script>';
            $html .= '</head><body></body></html>';

            echo $html;
        }
        else
        {
            // All other cases use the more efficient HTTP header for redirection.
            $this->header($moved ? 'HTTP/1.1 301 Moved Permanently' : 'HTTP/1.1 303 See other');
            $this->header('Location: ' . $url);
            $this->header('Content-Type: text/html; charset=' . $this->charSet);
        }
    }