"ErrorDocument 404 dalam .htaccess tidak serasi dengan RewriteRule, mengakibatkan kegagalan fungsi"
P粉320361201
P粉320361201 2024-01-10 16:56:14
0
1
329

.htaccess ErrorDocument 404 Tiada ubah hala apabila menggunakan peraturan tulis semula. Ralat Pelayan Dalaman 500 berlaku.

Tidak RewriteRule 时,ErrorDocument berfungsi dengan baik.

Kod saya

RewriteEngine On 
   <IfModule mod_rewrite.c>
   RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ /stores/  [NC,L]
   ErrorDocument 404 /404.html
  </IfModule>

P粉320361201
P粉320361201

membalas semua(1)
P粉605233764

"Masalah" dengan peraturan ini ialah jika anda meminta fail yang tidak wujud, dan fail itu tidak wujud dalam /subdirektori/ subdirektori, maka ia akan menyebabkan gelung penulisan semula yang tidak terhingga (oleh itu Pelayan Dalaman 500 anda lihat Ralat) kerana ia cuba menulis semula berikut:

  • /tidak wujud (permintaan awal)
  • /kedai/tidak wujud (tulis semula pertama)
  • /kedai/kedai/tidak wujud (tulisan semula kedua)
  • /kedai/kedai/kedai/tidak wujud (tulisan semula ketiga)
  • Tunggu.

Anda sebenarnya tidak menyatakan perkara yang anda cuba capai, tetapi saya mengandaikan /stores ialah subdirektori "tersembunyi" dan anda berhasrat untuk menulis semula ke fail sebenar dalam subdirektori /stores. Ini adalah satu-satunya cara peraturan sedemikian akan berfungsi dengan arahan ErrorDocument 404 yang ditakrifkan dalam Apache.

Jadi apabila menulis semula ke subdirektori /stores, anda perlu menyemak dahulu sama ada permintaan akan dipetakan ke fail sebenar sebelum mengeluarkan penulisan semula. Dengan cara ini, sebarang permintaan untuk fail yang tidak wujud dan tidak dipetakan ke subdirektori /stores akan dihantar ke 404 ErrorDocument yang ditentukan oleh Apache.

Sebagai contoh, cuba gunakan kod berikut:

ErrorDocument 404 /404.html

RewriteEngine On 

# 如果该目录中存在文件,则将请求重写到“/stores”目录
RewriteCond %{DOCUMENT_ROOT}/stores/ -f
RewriteRule (.+) stores/ [L]

# (可选)将根目录的请求重写为“/stores/”
RewriteRule ^$ stores/ [L]

Tidak perlu <IfModule>bekas (tetapi anda meletakkan arahan RewriteEngine di luar bekas ini, yang tidak masuk akal).

Jika fail .htaccess terletak dalam akar dokumen, arahan RewriteBase tidak diperlukan.

Secara struktur, adalah lebih baik untuk menentukan ErrorDocument terlebih dahulu.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan