Heim  >  Fragen und Antworten  >  Hauptteil

Die Umschreiberegeln von htcaccess funktionieren nicht

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?

P粉848442185P粉848442185251 Tage vor369

Antworte allen(1)Ich werde antworten

  • P粉218775965

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

    此规则的“问题”在于它也与重写的 URL 匹配(具体来说,[^/]+index.php 匹配),因此会再次重写时间到 /screenshot-of-the-week/screenshot/index.php?id=index.phpid=123 参数被覆盖)。那么,我希望您的脚本生成 404 响应(不是 Apache)?

    要解决此问题,您应该使正则表达式更加具体和/或使用 END 标志 (Apache 2.4) 来防止重写引擎进行额外的循环(和第二次重写)。

    在您的示例中,您正在传递一个数值 - 因此,如果您只期望一个数值,则仅匹配数字。

    例如:

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

    请注意,我还在正则表达式中添加了尾随 $,否则您的网站可能会被滥用,因为任何内容都可以附加到 URL,并且相同的资源将被服务。 (在您的原始规则中附加 / 将产生相同的响应。)

    (我假设您的 .htaccess 文件位于文档根目录中。)


    MWL 测试器仅对文件进行一次遍历。这不是真正的 Apache 服务器的工作方式。因此,MWL 测试仪无法检测重写/重定向循环。

    当您访问 screenshot-of-the-week/screenshot/ 时,规则不会被处理(正则表达式不匹配)。 mod_dir 提供 DirectoryIndex 文档 (index.php),但没有 id 参数。

    Antwort
    0
  • StornierenAntwort