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 ?
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.php
(id=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 :
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
.