Heim  >  Fragen und Antworten  >  Hauptteil

Verwenden Sie .htaccess, um Dateipfade über Abfragezeichenfolgen in Dateinamen umzuschreiben

Ich habe Probleme, Dateipfade mithilfe von Abfragezeichenfolgen neu zu schreiben

Ich versuche, eine URL wie diese zu erhalten:

https://url.com/products/1_Samsung_Galaxy

Und schreibe die Anfrage wie folgt an meinen Server um:

https:url.com/model.php?id=1&title=Samsung_Galaxy

So sieht mein htaccess bisher aus:

RewriteEngine On

#rewrite no ending files to .php if file doesn't exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !products/
RewriteRule ^([^.]+)$ .php [NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/products/([1-9]+)(.*)$ model.php?id=&title= [NC,L]

Mit der aktuellen Konfiguration werden Anfragen an eine Datei namens „products.php“ gesendet, die sich im selben Verzeichnis wie „model.php“ befindet, aber scheinbar in einem anderen Verzeichnis liegt, da einige Skriptdateien, auf die in „products.php“ mit relativen Pfaden verwiesen wird, Ausnahmen auslösen wenn das darin enthaltene Objekt nicht existiert.

Eigentlich besteht mein Hauptproblem darin, dass ich die Apache-Syntax oder deren Funktionsweise nicht kenne und es mir schwer fällt, Ressourcen zu finden, in denen ich etwas über Apache lernen kann. Aus irgendeinem Grund ist die Apache-Dokumentation keine große Hilfe. Wenn es eine gute Ressource zum Erlernen des Schreibens von Apache-Dateien gibt, würde ich sie mir auch gerne ansehen.

P粉035600555P粉035600555315 Tage vor544

Antworte allen(1)Ich werde antworten

  • P粉463824410

    P粉4638244102024-01-02 10:59:01

    您的问题有点模糊,但我认为这就是您正在寻找的:

    RewriteEngine On
    
    # rewrite /products/ to /model.php/.....
    RewriteRule ^/?products/(\d+)(.*)$ /model.php?id=$1&title=$2 [L]
    
    # rewrite to "...php" if such file exists
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^ %{REQUEST_URI}.php [L]

    如果在 http 服务器的主机配置中实施,这些规则将起作用。或者,如果您无权访问该文件,则可以在位于 http 主机的 DOCUMENT_ROOT 文件夹中的分布式配置文件(“.htaccess”)中进行访问。

    与您的尝试的主要区别:

    • 目标路径被写为绝对路径。这解决了请求被重写到不同文件夹的问题。
    • 首先实现对 /model.php 的异常重写,因此在文件的较高位置执行,因为规则是从上到下处理的。这节省了一些条件。

    您还提到您“不熟悉 apache 语法”并且很难找到资源来学习它。

    我总是推荐 apache 模块的官方文档。它们品质卓越,并提供了很好的示例:

    https://httpd.apache.org/docs/current/mod /mod_rewrite.html

    Antwort
    0
  • StornierenAntwort