Maison  >  Questions et réponses  >  le corps du texte

.htaccess réécrit les cinq derniers répertoires en tant que valeurs GET

J'ai l'URL suivante :

https://sub.example.com/economy/billing/ payment-check/434/khipu/1000/CLP/1673526088/

Je souhaite convertir les 5 derniers répertoires en valeurs GET pour refléter l'URL suivante :

https://sub.example.com/economy/billing/ payment-check/?id=434&gateway=khipu&amt=1000&curr=CLP&ts_ttPageLoad=1673526088

J'ai les lignes .htaccess suivantes :

RewriteEngine on
RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/ index.php?id=&gateway=&amt=&curr=&ts_ttPageLoad= [QSA,L]

Sur https://htaccess.madewithlove.com/ j'obtiens les résultats de réécriture suivants :

https://sub.example.com/index.php?id=economy/billing/ payment-check/434&gateway=khipu&amt=1000&curr=CLP&ts_ttPageLoad=1673526088

Qu'est-ce que j'ai fait de mal ? Merci!

Modifier : .htaccess situé sur https://sub.example.com/economy/billing/ payment-check/

P粉451614834P粉451614834251 Il y a quelques jours331

répondre à tous(1)je répondrai

  • P粉384679266

    P粉3846792662024-01-17 13:06:03

    Quantificateur d'expression régulière * 默认情况下是贪婪,因此会消耗尽可能多的内容,然后根据需要回溯。这就是为什么 包含 economy/billing/ payment-check/434 (即尽可能满足正则表达式)。尽管如此,这是假设 .htaccess Le fichier se trouve à la racine du document (c'est ce que suppose le testeur MWL).

    Si vous souhaitez uniquement faire correspondre un seul segment de chemin, excluez les barres obliques de la capture des sous-modèles, par exemple. ([^/]+).

    De plus, en fonction de la nature de vos règles, je suppose que ce .htaccess 文件位于 /economy/billing/ payment-check/ 子目录中(而不是根)? “MWL tester”工具假定 .htaccess 文件位于文档根目录中(并且无法更改)。事实上,如果 .htaccess fichier se trouve dans un sous-répertoire, qui "fonctionnera" sur votre serveur, cependant, ce n'est pas optimal car c'est toujours possible étant donné les changements d'URL. structures.

    Si .htaccess 文件位于 /economy/billing/ payment-check/.htaccess, alors utilisez ce qui suit :

    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ index.php?id=&gateway=&amt=&curr=&ts_ttPageLoad= [QSA,L]

    Expression régulière [^/]+ Correspond à tout sauf les barres obliques.

    Cependant, si la règle se trouve dans le fichier racine .htaccess (comme prévu par les testeurs MWL), la règle doit ressembler à ceci :

    RewriteRule ^(economy/billing/payment-check)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /index.php?id=&gateway=&amt=&curr=&ts_ttPageLoad= [QSA,L]

    Notez que le premier sous-modèle capturé est désormais le chemin de l'URL, qui est répété dans la chaîne replacement (deuxième argument). Cela évite simplement de répéter manuellement le chemin de l'URL dans le deuxième paramètre.

    Votre URL semble nécessiter un type de données spécifique dans le segment du chemin. Par exemple, les premier, troisième et cinquième « arguments » ressemblent à de simples nombres. Si tel est le cas, vous devez être précis et faire correspondre uniquement les chiffres. De même, le quatrième « param » est en majuscule et le second est en minuscule. Donc, spécifiquement, il peut être réécrit comme ceci (en utilisant un fichier .htaccess dans un sous-répertoire) :

    RewriteRule ^(\d+)/([a-z]+)/(\d+)/([A-Z]+)/(\d+)/$ index.php?id=&gateway=&amt=&curr=&ts_ttPageLoad= [QSA,L]

    Il ne correspondra qu'au format de l'URL que vous attendez.

    répondre
    0
  • Annulerrépondre