Rumah > Soal Jawab > teks badan
.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粉6052337642024-01-11 09:26:16
"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:
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.