PHP имеет эквивалент RequestDispatcher.forward Java?

Отредактируйте ваш .htaccess с помощью этого кода. это может помочь

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]

RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php

</IfModule>
9
задан talonx 21 June 2013 в 11:25
поделиться

5 ответов

Если Вы обеспокоены ВИХРЕВОЙ доступностью затем, Вы могли бы использовать file_get_contents() и потоки. Установка функции как:

function forward($location, $vars = array()) 
{
    $file ='http://'.$_SERVER['HTTP_HOST']
    .substr($_SERVER['REQUEST_URI'],0,strrpos($_SERVER['REQUEST_URI'], '/')+1)
    .$location;

    if(!empty($vars))
    {
         $file .="?".http_build_query($vars);
    }

    $response = file_get_contents($file);

    echo $response;
}

Это просто настраивает ПОЛУЧЕНИЕ, но можно сделать сообщение с file_get_contents() также.

0
ответ дан 5 December 2019 в 02:28
поделиться

Прием о Запросе. Вперед то, что это дает Вам чистый, новый запрос действию, которое Вы хотите. Поэтому у Вас нет residu от текущего запроса, и например, никакие проблемы со сценариями, которые полагаются на Java eq $ _SERVER ['REQUEST_URI'] быть чем-то.

Вы могли просто заглядывать ВИХРЕВОМУ классу и записать простую функцию, чтобы сделать это:

<?php 
/**
 * CURLHandler handles simple HTTP GETs and POSTs via Curl 
 * 
 * @author SchizoDuckie
 * @version 1.0
 * @access public
 */
class CURLHandler
{

    /**
     * CURLHandler::Get()
     * 
     * Executes a standard GET request via Curl.
     * Static function, so that you can use: CurlHandler::Get('http://www.google.com');
     * 
     * @param string $url url to get
     * @return string HTML output
     */
    public static function Get($url)
    {
       return self::doRequest('GET', $url);
    }

    /**
     * CURLHandler::Post()
     * 
     * Executes a standard POST request via Curl.
     * Static function, so you can use CurlHandler::Post('http://www.google.com', array('q'=>'belfabriek'));
     * If you want to send a File via post (to e.g. PHP's $_FILES), prefix the value of an item with an @ ! 
     * @param string $url url to post data to
     * @param Array $vars Array with key=>value pairs to post.
     * @return string HTML output
     */
    public static function Post($url, $vars, $auth = false) 
    {
       return self::doRequest('POST', $url, $vars, $auth);
    }

    /**
     * CURLHandler::doRequest()
     * This is what actually does the request
     * <pre>
     * - Create Curl handle with curl_init
     * - Set options like CURLOPT_URL, CURLOPT_RETURNTRANSFER and CURLOPT_HEADER
     * - Set eventual optional options (like CURLOPT_POST and CURLOPT_POSTFIELDS)
     * - Call curl_exec on the interface
     * - Close the connection
     * - Return the result or throw an exception.
     * </pre>
     * @param mixed $method Request Method (Get/ Post)
     * @param mixed $url URI to get or post to
     * @param mixed $vars Array of variables (only mandatory in POST requests)
     * @return string HTML output
     */
    public static function doRequest($method, $url, $vars=array(), $auth = false)
    {
        $curlInterface = curl_init();

        curl_setopt_array ($curlInterface, array( 
            CURLOPT_URL => $url,
            CURLOPT_CONNECTTIMEOUT => 2,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_FOLLOWLOCATION =>1,
            CURLOPT_HEADER => 0));

        if (strtoupper($method) == 'POST')
        {
            curl_setopt_array($curlInterface, array(
                CURLOPT_POST => 1,
                CURLOPT_POSTFIELDS => http_build_query($vars))
            );  
        }
        if($auth !== false)
        {
              curl_setopt($curlInterface, CURLOPT_USERPWD, $auth['username'] . ":" . $auth['password']);
        }
        $result = curl_exec ($curlInterface);
        curl_close ($curlInterface);

        if($result === NULL)
        {
            throw new Exception('Curl Request Error: '.curl_errno($curlInterface) . " - " . curl_error($curlInterface));
        }
        else
        {
            return($result);
        }
    }

}

Просто выведите это в классе. CURLHandler.php и Вы можете сделать это:

конечно, использование $ _REQUEST не действительно безопасно (необходимо проверить $ _SERVER ['REQUEST_METHOD']), но Вы понимаете.

<?php
include('class.CURLHandler.php');
die CURLHandler::doRequest($_SERVER['REQUEST_METHOD'], 'http://server/myaction', $_REQUEST);
?>

Конечно, ЗАВИХРЕНИЕ не установило везде, но у нас есть собственные эмуляторы завихрения PHP для этого.

Кроме того, это дает Вам еще больше гибкости, чем Запрос. Передайте, поскольку Вы могли также поймать и выполнить последующую обработку вывод.

1
ответ дан 5 December 2019 в 02:28
поделиться

Если Вы используете MVC как Платформа Зенда, обеспечивает, можно изменить действие контроллера или даже перейти между действиями контроллера. Метод является _forward, как описано здесь.

1
ответ дан 5 December 2019 в 02:28
поделиться

Я полагаю, что один из самых близких аналогичных методов должен был бы использовать виртуальное () функция на при выполнении php как апачский модуль.

виртуальный () определенная для Apache функция, которая подобна в mod_include. Это выполняет подзапрос Apache.

1
ответ дан 5 December 2019 в 02:28
поделиться

Можно использовать как:

header ("Location: /path/");
exit;

Выход является потребностью на всякий случай, некоторый вывод HTML был отправлен прежде, заголовок () не будет работать, таким образом, Вы будете должны отправленный новый заголовок перед любым выводом к браузеру.

-3
ответ дан 5 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: