URL $_SERVER ['REQUEST_URI'] manipuleren

This is my url: http://localhost/framework/index.php

echo $_SERVER['REQUEST_URI'];

Zou uitvoeren: /framework/index.php

Maar als mijn URL was:

http://localhost/framework/

De uitvoer zou zijn:

/framework/

En als ik het bestand verplaats, krijg je het idee.

Hoe pak ik de inhoud na mappen/uiteindelijk index.php bestand? Mijn idee is om index.php als front controller te hebben.

Als ik heb:

http: //localhost/framework/index.php/test/test

Ik wil alleen het test-/testgedeelte.

http://localhost/framework/test/test

Ik wil alleen het test-/testgedeelte.

1
Ik heb alleen in $ _SERVER-variabelen gekeken om te zien of ik degene kon vinden die me geven wat ik wil, zonder enig geluk. PATH_INFO had potentieel, maar niet wat Im echt zoekt.
toegevoegd de auteur John, de bron
Als ik mappen heb, zal ook dat worden omgeleid? Zoals CSS /
toegevoegd de auteur John, de bron
Gebruik mod_rewrite en herschrijf alles naar index.php/uw/pad . Uw .htaccess ziet er als volgt uit: gist.github.com/1320584 . Dan kunt u Daveo`s oplossing veilig gebruiken.
toegevoegd de auteur mAu, de bron
Nee. Daarom de RewriteCond% {REQUEST_FILENAME}! -D en RewriteCond% {REQUEST_FILENAME}! -F . Dus als u toegang tot een geldig bestand of een map, zal mod_rewrite niets veranderen. Maar als u bijvoorbeeld naar http://uwdomein.nl/this/is/a/test gaat, eindigt u (intern blijft de URL van de browser ongewijzigd) met http: //yourdomain.com/index.php/this/is/a/test .
toegevoegd de auteur mAu, de bron

1 antwoord

U kunt de basisuri automatisch detecteren en verwijderen, waardoor u het test-/testgedeelte blijft.

if(!empty($_SERVER['PATH_INFO']))
{
   //Uri info does not contain docroot or index
    $uri = $_SERVER['PATH_INFO'];
}
else
{
    if(!empty($_SERVER['REQUEST_URI']) && !empty($_SERVER['HTTP_HOST']))
    {
       $fullUrl = 'http://'
                  . ((isset($_SERVER['HTTP_HOST'])) ? $_SERVER['HTTP_HOST'] : '')
                  . ((isset($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] : '');

       $uri = parse_url($fullUrl, PHP_URL_PATH);
    }
    else if(!empty($_SERVER['PHP_SELF']))
    {
       $uri = $_SERVER['PHP_SELF'];
    }
}

$baseUri = substr($_SERVER['SCRIPT_NAME'], 0, strrpos($_SERVER['SCRIPT_NAME'], "/")+1);
$uri = str_replace($baseUri, '', $uri);

Edit: mAu's comment above is correct. I was under the assumption you was already using mod rewrite.

4
toegevoegd
Wat als (zoals gegeven in de vraag als een mogelijkheid) index.php geen deel uitmaakt van de aanvraag-URI?
toegevoegd de auteur hakre, de bron
Bijgewerkte code. Het bovenstaande werkt goed voor mij. De scriptnaam is nog steeds geldig, ongeacht of deze in de absolute URL wordt weergegeven of niet.
toegevoegd de auteur Daveo, de bron
@Daveo, hoewel het antwoord goed is, kunt u proberen meer inzicht te geven in het antwoord op de vraag stackoverflow.com/questions/12711371
toegevoegd de auteur harry, de bron