Rumah  >  Soal Jawab  >  teks badan

Gunakan .htaccess untuk menulis semula laluan fail kepada nama fail melalui rentetan pertanyaan

Saya menghadapi masalah menulis semula laluan fail menggunakan rentetan pertanyaan

Saya cuba dapatkan url seperti ini:

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

Dan tulis semula permintaan ke pelayan saya seperti ini:

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

Beginilah rupa htaccess saya setakat ini:

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]

Dengan konfigurasi semasa, permintaan dihantar ke fail bernama products.php yang terletak dalam direktori yang sama seperti model.php, tetapi nampaknya berada dalam direktori yang berbeza kerana beberapa fail skrip dirujuk dalam products.php dengan laluan relatif membuang Pengecualian adalah ralat di mana objek yang terkandung di dalamnya tidak wujud.

Sebenarnya, masalah utama saya ialah saya tidak tahu sintaks apache atau cara ia berfungsi, dan saya menghadapi kesukaran mencari sumber di mana saya boleh belajar tentang apache. Atas sebab tertentu dokumentasi apache tidak banyak membantu. Jika ada sumber yang baik untuk mempelajari cara menulis fail apache, saya ingin menyemaknya juga.

P粉035600555P粉035600555266 hari yang lalu501

membalas semua(1)saya akan balas

  • P粉463824410

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

    Soalan anda agak kabur, tetapi saya rasa inilah yang anda cari:

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

    Peraturan ini akan berfungsi jika dilaksanakan dalam konfigurasi hos pelayan http. Sebagai alternatif, jika anda tidak mempunyai akses kepada fail tersebut, anda boleh mengaksesnya dalam fail konfigurasi yang diedarkan (".htaccess") yang terletak dalam folder DOCUMENT_ROOT hos http.

    Perbezaan utama daripada percubaan anda:

    • Laluan sasaran ditulis sebagai path mutlak. Ini menyelesaikan masalah permintaan yang ditulis semula ke folder yang berbeza.
    • Laksanakan pengecualian tulis semula ke /model.php dahulu, jadi ia dilaksanakan lebih tinggi dalam fail memandangkan peraturan diproses dari atas ke bawah. Ini menjimatkan beberapa syarat.

    Anda juga menyebut bahawa anda "tidak biasa dengan sintaks apache" dan akan menghadapi masalah mencari sumber untuk mempelajarinya.

    Saya sentiasa mengesyorkan dokumentasi rasmi modul apache. Mereka mempunyai kualiti yang sangat baik dan memberikan contoh yang hebat:

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

    balas
    0
  • Batalbalas