Préface: Oui, cette question semble dupliquée et j’ai trouvé des questions connexes, mais les réponses ne m’ont pas aidé. 🙁
Bonjour, je souhaite append le support de l’URL lisible par l’homme pour mon projet PHP. Pour l’instant, ma chaîne de requête URL ressemble à ceci:
index.php?url=main/index
Je voudrais que ça ressemble à ça:
index.php/main/index
J’ai lu les articles suivants:
Stackoverflow
Cheatsheet
Stackoverflow
Stackoverflow
Mais quand je fais ça:
var_dump($_GET['url']); // get empty array
, obtenez un tableau vide comme aucun paramètre d’url ajouté.
Mon actuel .htaccess
:
DirectoryIndex index.php Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule ^(.*)$ index.php?url=$1 [NC]
quelqu’un peut m’aider s’il vous plait? Merci!
URL: http://domain.com/index.php/controller/action
URL réécrite: http://domain.com/index.php?url=controller/action
.htaccess
DirectoryIndex index.php Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule ^index.php/(.*)$ /index.php?url=$1 [L,QSA]
Explication:
Le ^index.php/(.*)$
.*
^index.php/(.*)$
modèle ^index.php/(.*)$
correspond à tout ce qui se trouve après index.php/
sur l’URL entrante. Les parenthèses permettent de capturer la pièce en tant que variable $1
, qui est ensuite ajoutée à la fin de l’URL de substitution /index.php?url=
+ $1
.
[L, QSA]
: L ignore les autres règles de réécriture, si cela convient. QSA signifie append une chaîne de requête.
Tu as
index.php?url=main/index
Yuo veut réécrire (puis redirect l’utilisateur) vers ce
index.php/main/index
Qu’en est-il d’essayer cela?
DirectoryIndex index.php Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond %{QUERY_STRING} ^url=([az]+)/([az]+)$ RewriteRule ^.*$ http://mydomain.site/index.php/%1/%2 [R=302,L]
R = 301 ou 302 dépendent de vos besoins
Sur cet exemple, je suppose que sur l’URL d’origine, il n’y a que des caractères az. Juste pour clarifier (en raison du fait que le processus est généralement inversé) de cette façon les utilisateurs seront redirigés, cette règle ne convertit pas les liens sur votre page.
En ligne
RewriteRule ^(.*)$ index.php?url=$1 [NC]
Le (. *) Fait correspondre la partie de l’URL à ‘?’ où la requête commence.
Pour utiliser les valeurs transmises dans la requête, vous avez besoin de l’indicateur QSA. Means Query Ssortingng Append.
Si votre URL: http://www.abcd.com/index.php/abcd / …
.htaccess RewriteEngine on RewriteCond $1 !^(index\.php|resources|robots\.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Essayez le code ci-dessous, considéré uniquement pour index.php, vous pouvez le remplacer selon vos besoins. Faites moi savoir si vous avez besoin d’une aide supplémentaire.
DirectoryIndex index.php Options +FollowSymLinks RewriteEngine ON RewriteBase / RewriteRule ^(index\.php)/([0-9a-zA-Z\/_-]{1,99}) index.php?url=$2
Ce qui a fonctionné pour moi est: – C’est la seule chose que j’ai faite sur l’URL
http://localhost/baba.php/abcd
. et fichier .htaccess original
DirectoryIndex baba.php RewriteEngine ON RewriteBase / RewriteRule ^(baba\.php)*/([0-9a-zA-Z\/_-]{1,99}) baba.php?url=$2