.htaccess rewrite / Zend Framework Routing

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

joe_black
Average Member
Mesaje: 51
Membru din: Mie Mai 03, 2006 6:19 pm

.htaccess rewrite / Zend Framework Routing

Mesajde joe_black » Joi Aug 28, 2008 9:32 pm

Pot sa elimin cu ajutorul .htaccess ori din Zend Framework (intr-un mod elegant) ".html" din coada REQUEST_URI-ului? Ma incurca nevoie mare.

Am incercat

Cod: Selectaţi tot

RewriteEngine on
Options FollowSymlinks

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)\.html$ index.php/$1

dar fara rezultat

Pot sa configurez o ruta care sa stie sa imi scoata automat asta si totodata sa imi imperecheze /variabila/valoare ?

Exemplu de ruta dar care nu se incurca in ".html":

Cod: Selectaţi tot

$customRoute = new Zend_Controller_Router_Route('/custom/*',
                                    array(
                                          'action' => 'index',
                                          'controller' => 'custom',
                                          'module' => 'default'
                                             ));


O solutie total neeleganta ar fi:

Cod: Selectaţi tot

$pathInfo = $_SERVER['REQUEST_URI'];
$pathInfo = preg_replace('#\.html$#','',$pathInfo);
$_SERVER['REQUEST_URI'] = $pathInfo;


SO .. Anyone?



joe_black
Average Member
Mesaje: 51
Membru din: Mie Mai 03, 2006 6:19 pm

Mesajde joe_black » Vin Aug 29, 2008 1:24 am

Postul lui Amnethes a disparut ca prin minune.
sa stii ca nu e chiar asa greedy


Cod: Selectaţi tot

 RewriteEngine on
Options FollowSymlinks

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)\.html$ index.php/$1

am observat ca modifica totul in afara de request uri care ma interesaeaza pe mine :)
'REQUEST_URI' => string '/asd/aca.html'
'SCRIPT_NAME' => string '/asd/index.php'
'PATH_INFO' => string '/aca'
'PATH_TRANSLATED' => string 'D:\wamp\www\aca'
'PHP_SELF' => string '/asd/index.php/aca


Daca intereseaza pe cineva Zend Framework in amanunt... uite ce am descoperit:


in Zend_Controller_Request_Http avem

Cod: Selectaţi tot

public function setPathInfo($pathInfo = null)
    {
        if ($pathInfo === null) {
            $baseUrl = $this->getBaseUrl();

            if (null === ($requestUri = $this->getRequestUri())) {
                return $this;
            }

            // Remove the query string from REQUEST_URI
            if ($pos = strpos($requestUri, '?')) {
                $requestUri = substr($requestUri, 0, $pos);
            }

            if ((null !== $baseUrl)
                && (false === ($pathInfo = substr($requestUri, strlen($baseUrl)))))
            {
                // If substr() returns false then PATH_INFO is set to an empty string
                $pathInfo = '';
            } elseif (null === $baseUrl) {
                $pathInfo = $requestUri;
            }
        }

        $this->_pathInfo = (string) $pathInfo;
        return $this;
    }


ea determina singura PATH_INFO prin eliminarea "BASE_URL" din 'REQUEST_URI' si nu il accepta pe cel oferit de server.

Solutia
1. Iti faci o clasa de rutare destul de simpla care extinde Route Abstract , redefinesti functia de match schimbi $pathInfo si faci parent::match($pathInfo)

2. Cu japca
2.1
$pathInfo = $_SERVER['REQUEST_URI'];
$pathInfo = preg_replace('#\.html$#','',$pathInfo);
$_SERVER['REQUEST_URI'] = $pathInfo;

sau
injectare in Rrequest

Daca are altcineva alta solutie .. o astept cu nerabdare :)

Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Vin Aug 29, 2008 10:41 am

Eu l-am sters, imi dadusem seama ca nu am dreptate si vroiam sa mai investigez. N-am aflat nimic insa.

Nu stiu la ce te refereai cand ai spus "sau injectare in Rrequest" dar cam asa as face eu in bootstrap:

Cod: Selectaţi tot

$request = new Zend_Controller_Request_Http;
$request->setPathInfo($_SERVER['PATH_INFO']);

$frontController->dispatch($request);


Mie mi-a mers asta. Alternativ as subclasa Zend_Controller_Request_Http, dar nu cred ca are sens in cazul de fata.

joe_black
Average Member
Mesaje: 51
Membru din: Mie Mai 03, 2006 6:19 pm

Mesajde joe_black » Vin Aug 29, 2008 1:14 pm

La "injectie" de genul asta refeream si eu.


Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 2 vizitatori