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

les règles de réécriture htcaccess ne fonctionnent pas

Je travaille sur un projet où j'essaie de faire de la réécriture d'URL à la racine de mon site Web. Le .htaccess actuel est le suivant

RewriteEngine On 
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L]

RewriteRule ^screenshot-of-the-week/screenshot/([^/]+) /screenshot-of-the-week/screenshot/index.php?id=

La réécriture est activée sur mon site Web. J'ai vérifié le code via le testeur htaccess et il affiche les valeurs correctes.

Cependant, lorsque je visite screenshot-of-the-week/screenshot/123 为例时,我得到了 404 页面。当我访问 screenshot-of-the-week/screenshot/, cela fonctionne très bien.

De plus, lorsque vous accédez manuellement à la "vraie" URL, cela fonctionne également comme prévu : screenshot-of-the-week/screenshot/index.php?id=123

Je n'arrive pas à comprendre quel est le problème et j'ai essayé de déplacer .htaccess vers un autre dossier et bien sûr de modifier le chemin, mais sans succès.

Quelqu'un peut-il fournir d'autres conseils de dépannage ? Comment puis-je vérifier ce que fait réellement la redirection en coulisse ?

P粉848442185P粉848442185251 Il y a quelques jours367

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

  • P粉218775965

    P粉2187759652024-01-17 17:55:15

    Le "problème" avec cette règle est qu'elle correspond également aux URL réécrites (en particulier, les paramètres [^/]+index.php 匹配),因此会再次重写时间到 /screenshot-of-the-week/screenshot/index.php?id=index.phpid=123 sont remplacés). Donc, je m'attends à ce que votre script génère une réponse 404 (pas Apache) ?

    Pour résoudre ce problème, vous devez rendre l'expression régulière plus spécifique et/ou utiliser l'indicateur END (Apache 2.4) pour empêcher le moteur de réécriture de faire une boucle supplémentaire (et une seconde réécriture).

    Dans votre exemple, vous transmettez une valeur numérique - donc si vous attendez uniquement une valeur numérique, seuls les nombres correspondront.

    Par exemple :

    RewriteRule ^screenshot-of-the-week/screenshot/(\d+)$ /screenshot-of-the-week/screenshot/index.php?id= [END]

    Notez que j'ai également ajouté un $,否则您的网站可能会被滥用,因为任何内容都可以附加到 URL,并且相同的资源将被服务。 (在您的原始规则中附加 / final à l'expression régulière qui produira la même réponse. )

    (Je suppose que votre fichier .htaccess se trouve à la racine du document.)


    Le testeur MWL n'effectue qu'un seul passage dans le fichier. Ce n’est pas ainsi que fonctionne un vrai serveur Apache. Par conséquent, le testeur MWL ne peut pas détecter les boucles de réécriture/redirection.

    Lorsque vous accédez au paramètre screenshot-of-the-week/screenshot/ 时,规则不会被处理(正则表达式不匹配)。 mod_dir 提供 DirectoryIndex 文档 (index.php),但没有 id.

    répondre
    0
  • Annulerrépondre