Gunakan .htaccess untuk menulis semula laluan fail kepada nama fail melalui rentetan pertanyaan
P粉035600555
P粉035600555 2024-01-01 15:35:08
0
1
542

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粉035600555
P粉035600555

membalas semua(1)
P粉463824410

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!