peraturan penulisan semula htaccess tidak berfungsi selepas berhijrah ke php 8
P粉274161593
P粉274161593 2023-09-01 15:19:38
0
1
491
<p>Selepas berhijrah daripada PHP 7 ke PHP 8, saya menghadapi masalah dengan peraturan penulisan semula url. </p> <p>Di atas htaccess saya mempunyai kod berikut</p> <pre class="brush:php;toolbar:false;">Pilihan +FollowSymLinks Tulis SemulaEnjin dihidupkan RewriteBase /baba/ ErrorDocument 404 http://localhost/baba/404.php</pre> <ol> <li>Cari halaman:-</li> </ol> <p>Ia berfungsi hebat jika saya hanya menggunakan peraturan berikut: -</p> <pre class="brush:php;toolbar:false;">RewriteRule ^s/([w-]+)/(.*)$ search.php?feq=$1&key=$2 [QSA,L ]</pre> <p>Tetapi jika saya menambah lebih banyak peraturan seperti di bawah maka halaman ini akan memberikan 404. </p> <pre class="brush:php;toolbar:false;">RewriteRule ^s/([w-]+)/(.*)/(.*)$ search.php?feq=$1&city= $2&kunci=$3 [QSA,L] RewriteRule ^s/([w-]+)/(.*)/(.*)/(.*)$ search.php?feq=$1&pro=$2&city=$3&key=$4 [ QSA,L]</pre> <ol start="2"> <li>Halaman pendaratan:-</li> </ol> <p>Ia berfungsi hebat jika saya hanya menggunakan peraturan berikut: -</p> <pre class="brush:php;toolbar:false;">RewriteRule ^([w-]+)$ land.php?name=$1 [QSA,L]</pre> <p>Tetapi jika saya menambah lebih banyak peraturan seperti di bawah, css dan imej berhenti dimuatkan pada halaman lain dan halaman tersebut memberikan 404. </p> <pre class="brush:php;toolbar:false;">RewriteRule ^([w-]+)/(.*)/(.*)$ land.php?name=$1&pro=$2& ;bandar=$3 [QSA,L] RewriteRule ^([w-]+)/(.*)$ land.php?name=$1&key=$2 [QSA,L] RewriteRule ^([w-]+)/(.*)/(.*) land.php?name=$1&city=$2&key=$3 [QSA,L] RewriteRule ^([w-]+)/(.*)/(.*)/(.*)$ land.php?name=$1&pro=$2&city=$3&key=$4 [QSA, L]</pre></p>
P粉274161593
P粉274161593

membalas semua(1)
P粉022501495

Ini tiada kaitan dengan versi PHP - peraturan anda jelas bercanggah...

Oleh kerana regex dalam peraturan pertama adalah terlalu umum (ia sepadan dengan /s/foo/),如果您简单地添加第二条规则,那么第一条规则仍然会捕获所有请求并重写为 search.php?feq=foo&key= tanpa mengira bilangan segmen laluan Anda perlu lebih spesifik dengan regex Contohnya, hanya padankan keseluruhan segmen laluan, bukan secara literal mana-mana :

RewriteRule ^s/([\w-]+)/([^/]*)$ search.php?feq=&key= [QSA,L]

RewriteRule ^s/([\w-]+)/([^/]+)/([^/]*)$ search.php?feq=&city=&key= [QSA,L]
RewriteRule ^s/([\w-]+)/([^/]+)/([^/]+)/([^/]*)$ search.php?feq=&pro=&city=&key= [QSA,L]

Sila ambil perhatian [^/](除 / 之外的任何内容)而不是 .(任何内容)。还可以在强制路径段中使用 + (1 atau lebih).

Seperti peraturan asal anda, key parameter URL (iaitu segmen laluan kedua dalam peraturan pertama dan segmen laluan terakhir dalam peraturan berikutnya) adalah pilihan. Adakah ini disengajakan?

Jika anda tahu aksara yang dibenarkan dalam parameter URL ini, anda harus menunjukkan aksara ini dalam ungkapan biasa untuk mengehadkan lagi URL, jika tidak, ia akan ditulis semula (tidak betul).

Anda juga boleh membalikkan susunan arahan untuk menyelesaikan masalah yang dihadapi, tetapi ini hanyalah penyelesaian separa kerana regex anda masih terlalu generik.

Seperti yang dinyatakan di atas. Walau bagaimanapun, CSS dan kegagalan imej mungkin disebabkan oleh menggunakan laluan URL relatif untuk sumber ini dalam HTML sisi klien. Anda sedang menulis semula permintaan daripada kedalaman laluan yang berbeza, jadi anda mesti menggunakan URL relatif (atau mutlak) akar sumber statik. URL relatif diselesaikan secara semula jadi (oleh penyemak imbas) berbanding URL dalam bar alamat penyemak imbas.

(Sebagai penyelesaian, anda boleh melepasi laluan URL asas head 部分中设置 baserelatif dalam elemen untuk menunjukkan bahawa semua URL relatif adalah relatif, tetapi ini bukan tanpa kaveat.)

Bacaan lanjut mengenai aset yang hilang:

Juga ambil perhatian bahawa peraturan "Halaman Pendaratan" anda mesti datang selepas peraturan "Halaman Carian" anda jika tidak peraturan itu juga akan bercanggah. Sekali lagi, konflik ini boleh dielakkan dengan membuat ungkapan biasa lebih spesifik. Contohnya, dengan menukar segmen laluan pertama dalam "Halaman Pendaratan" (name URL 参数的值)设置为 2 个或更多字符,而不是 1 个或更多字符,以避免与 / 冲突s/(dalam "Carian").


Riwayat:

Ini mencetuskan ubah hala 302 (sementara) ke dokumen ralat 404 anda (yang menyembunyikan respons 404 dan URL yang sebenarnya mencetuskan 404). Ini biasanya tidak digalakkan melainkan anda mempunyai keperluan yang sangat khusus. Anda biasanya harus menggunakan laluan URL relatif akar di sini. Contohnya:

ErrorDocument 404 /baba/404.php

/baba/404.php kemudiannya disampaikan melalui subpermintaan dalaman, dan dokumen ralat itu sendiri tidak didedahkan kepada pengguna akhir.

Jika anda menggunakan Ubah hala untuk menyelesaikan isu sumber yang hilang, lihat di atas tentang tidak menggunakan URL relatif dalam kod sumber 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!