peraturan penulisan semula htaccess tidak berfungsi selepas berhijrah ke php 8
P粉274161593
P粉274161593 2023-09-01 15:19:38
0
1
449

Selepas berhijrah daripada PHP 7 ke PHP 8, saya menghadapi masalah dengan peraturan penulisan semula url.

Di atas htaccess saya mempunyai kod berikut

Pilihan +FollowSymLinks Tulis SemulaEnjin dihidupkan RewriteBase /baba/ ErrorDocument 404 http://localhost/baba/404.php
  1. Cari halaman:-

Ia berfungsi hebat jika saya hanya menggunakan peraturan berikut: -

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

Tetapi jika saya menambah lebih banyak peraturan seperti di bawah maka halaman ini akan memberikan 404.

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]
  1. Halaman pendaratan:-

Ia berfungsi hebat jika saya hanya menggunakan peraturan berikut: -

RewriteRule ^([w-]+)$ land.php?name=$1 [QSA,L]

Tetapi jika saya menambah lebih banyak peraturan seperti di bawah, css dan imej berhenti dimuatkan pada halaman lain dan halaman tersebut memberikan 404.

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]

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 literalmana-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,keyparameter URL (iaitu segmen laluan kedua dalam peraturan pertama dan segmen laluan terakhir dalam peraturan berikutnya) adalahpilihan. 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 asashead部分中设置baserelatifdalam elemenuntuk 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" andajika 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" (nameURL 参数的值)设置为 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.phpkemudiannya 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!