Ich arbeite an einem Projekt, bei dem ich versuche, die URL im Stammverzeichnis meiner Website neu zu schreiben. Der aktuelle .htaccess
ist wie folgt
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=
Auf meiner Website ist das Umschreiben aktiviert. Ich habe den Code mit dem htaccess-Tester überprüft und er zeigt die richtigen Werte an.
Beim Besuch screenshot-of-the-week/screenshot/123
为例时,我得到了 404 页面。当我访问 screenshot-of-the-week/screenshot/
funktioniert es jedoch einwandfrei.
Auch wenn manuell zur „echten“ URL gewechselt wird, funktioniert es wie erwartet: screenshot-of-the-week/screenshot/index.php?id=123
Ich kann das Problem anscheinend nicht herausfinden und habe versucht, .htaccess
in einen anderen Ordner zu verschieben und natürlich den Pfad zu bearbeiten, aber ohne Erfolg.
Kann jemand weitere Tipps zur Fehlerbehebung geben? Wie kann ich überprüfen, was die Weiterleitung tatsächlich hinter den Kulissen macht?
此规则的“问题”在于它也与重写的 URL 匹配(具体来说,
[^/]+
与index.php
匹配),因此会再次重写时间到/screenshot-of-the-week/screenshot/index.php?id=index.php
(id=123
参数被覆盖)。那么,我希望您的脚本生成 404 响应(不是 Apache)?要解决此问题,您应该使正则表达式更加具体和/或使用
END
标志 (Apache 2.4) 来防止重写引擎进行额外的循环(和第二次重写)。在您的示例中,您正在传递一个数值 - 因此,如果您只期望一个数值,则仅匹配数字。
例如:
请注意,我还在正则表达式中添加了尾随
$
,否则您的网站可能会被滥用,因为任何内容都可以附加到 URL,并且相同的资源将被服务。 (在您的原始规则中附加/
将产生相同的响应。)(我假设您的
.htaccess
文件位于文档根目录中。)MWL 测试器仅对文件进行一次遍历。这不是真正的 Apache 服务器的工作方式。因此,MWL 测试仪无法检测重写/重定向循环。
当您访问
screenshot-of-the-week/screenshot/
时,规则不会被处理(正则表达式不匹配)。 mod_dir 提供DirectoryIndex
文档 (index.php
),但没有id
参数。