Apa arti $ 1 [QSA, L] dalam file .htaccess saya?

Jawaban:

215

Bukan tempat untuk memberikan tutorial lengkap, tapi ini dia singkatnya;

RewriteCond pada dasarnya berarti "jalankan RewriteRule berikutnya hanya jika ini benar". The !-lpath adalah kondisi bahwa permintaan tidak untuk link ( !berarti tidak, -lmenghubungkan berarti)

The RewriteRule pada dasarnya berarti bahwa jika permintaan dilakukan bahwa pertandingan ^(.+)$(cocok URL apapun kecuali root server), maka akan ditulis ulang sebagai index.php?url=$1yang berarti permintaan olleakan ditulis ulang sebagai index.php?url=olle).

QSAartinya jika ada string kueri yang diteruskan dengan URL asli, itu akan ditambahkan ke penulisan ulang ( olle?p=1akan ditulis ulang sebagai index.php?url=olle&p=1.

L berarti jika aturannya cocok, jangan proses RewriteRules lagi di bawah ini.

Untuk info lebih lengkapnya ikuti link di atas. Dukungan penulisan ulang bisa agak sulit untuk dipahami, tetapi ada beberapa contoh tentang stackoverflow yang dapat dipelajari.

Joachim Isaksson
sumber
QSA menggantikan ?untuk &, sehingga mustahil untuk membedakan antara /page&foobarvs /page?foobar. Bagaimana cara menghentikan QSA untuk mengganti ?ke &?
Pacerier
8

Jika kondisi berikut ini benar, maka tulis ulang URL:
Jika nama file yang diminta bukan direktori,

RewriteCond %{REQUEST_FILENAME} !-d

dan jika nama file yang diminta bukan file biasa yang ada,

RewriteCond %{REQUEST_FILENAME} !-f

dan jika nama file yang diminta bukan tautan simbolis,

RewriteCond %{REQUEST_FILENAME} !-l

lalu tulis ulang URL dengan cara berikut:
Ambil seluruh nama file permintaan dan berikan sebagai nilai parameter kueri "url" ke index.php. Tambahkan string kueri apa pun dari URL asli sebagai parameter kueri lebih lanjut (QSA), dan hentikan pemrosesan file .htaccess (L) ini.

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Dokumen Apache #flag_qsa

Contoh lain:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]

Dengan flag [QSA], permintaan untuk

/ halaman / 123? satu = dua

akan dipetakan ke

/page.php?page=123&one=two

antelove
sumber
0

Ini akan menangkap permintaan untuk file seperti version,, releasedan README.md, dll. Yang harus diperlakukan sebagai endpoint, jika didefinisikan (seperti dalam kasus / release), atau sebagai "tidak ditemukan".

Pyae Sone
sumber