Apakah masalah dalam aturan pesanan apa yang ditempatkan di htaccess?

9

Saya harap ini adalah jawaban YA atau TIDAK sederhana (mohon jelaskan alasannya)

T1: Apakah penting dalam urutan apa aturan ditempatkan di htaccess? Karena mereka adalah barang yang benar-benar terpisah: misalnya

Q2: Jika ya, apakah saya menerapkan urutan yang benar? untuk mempercepat mesin htacces dan tidak membebani dengan aturan yang tidak perlu?

Q3: setiap tips tentang apa yang harus dinonaktifkan / tambahkan di sini disambut gembira +1!


# DirectoryIndex index.php /index.php
AddDefaultCharset UTF-8
RewriteEngine on
# Options All
# Options +FollowSymLinks
# Options +FollowSymLinks -Indexes -ExecCGI
# RewriteBase /

#####################################################

<IfModule mod_headers.c>
    ExpiresActive On
    ExpiresDefault M172800
    Header unset ETag
    FileETag None
    Header unset Pragma

    ##### STATIC FILES
    <FilesMatch "\\.(ico|jpg|png|gif|svg|swf|css|js|fon|ttf|eot|xml|pdf|flv)$">
        ExpiresDefault M1209600
        Header set Cache-Control "public, max-age=1209600"
    </FilesMatch>

    ##### DYNAMIC PAGES
    <FilesMatch "\\.(php)$">
        ExpiresDefault M604800
        Header set Cache-Control "public, max-age=604800"
    </FilesMatch>
</IfModule>

#####################################################

#  /page123 and /page123/ will all go to /page123.php
RewriteRule ^(.+)/$  /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

####################################################

# NO WWW   http://www. becomes always http://
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

##############################################################
# add own extensions that will be interpreted as php
AddType application/x-httpd-php .php
AddType image/svg+xml svg svgz
AddType text/css css
AddType text/javascript js
AddEncoding gzip svgz

##############################################################

ErrorDocument 500 /
ErrorDocument 404 /
Sam
sumber

Jawaban:

10

Nah, file .htaccess menggunakan format yang sama dengan file konfigurasi Apache biasa, jadi aturan yang sama berlaku.

Sebagian besar pengaturan konfigurasi tidak tergantung pada urutan, tetapi beberapa pengaturan tergantung pada pengaturan.

RewriteRuledan RewriteCondmis. sensitif terhadap pesanan, jadi dalam hal ini jawabannya adalah YA.

Lihat misalnya

http://wiki.apache.org/httpd/RewriteRule

untuk penjelasan tentang urutan yang dievaluasi.

sleske
sumber
4

Bermasalah. Mengutip dari dokumentasi untuk RewriteRule :

Urutan aturan ini didefinisikan adalah penting - ini adalah urutan penerapannya saat dijalankan.

Flimm
sumber
1
Di dalam mod_rewrite, itu penting - ya. Namun, OP tidak secara khusus menangani mod_rewrite dan ada banyak arahan lain dari modul lain dalam file OP .htaccess. Singkatnya, arahan dari modul yang berbeda (dan dalam wadah yang berbeda ) dieksekusi secara independen dan dalam urutan yang telah ditentukan, terlepas dari urutan mereka dalam file konfigurasi.
MrWhite
1

Saya tidak dapat berbicara tentang bagaimana urutan <files>vs <Rewrite>, misalnya, mempengaruhi kinerja. Saya mencoba mencari tahu sendiri. Saya belum dapat menemukan info tentang ini, jadi mungkin itu tidak masalah ??

Namun, saya ingin menunjukkan bahwa antara Rewritevs Redirect(dan RedirectMatch), urutan eksekusi mungkin tidak ada dalam urutan yang tercantum, meskipun itu yang sering orang harapkan ..
Secara khusus, mod_rewritedan mod_aliasmodul diproses / dieksekusi secara independen, dan dalam yang order.

  1. Semua arahan mod_rewrite ( Rewrite) dijalankan (agar terdaftar).
  2. LALU semua arahan mod_alias ( Redirectdan RedirectMatch) dieksekusi dalam urutan mereka terdaftar dalam file.

Jadi, bahkan jika Redirecthasil a Rewrite, Pengalihan akan diproses hanya setelah semua Penulisan Ulang telah diproses.

Salah satu cara untuk menjaga file "terbaca" jika Anda memiliki pengalihan dan penulisan ulang, adalah dengan tidak menggunakan mod_aliasmodul sama sekali. Sebaliknya, gunakan saja mod_rewrite. Menulis ulang dengan bendera [R] pada dasarnya mengubahnya menjadi penulisan ulang.
Jawaban webmaster ini menunjukkan caranya.

Sekarang, semua arahan akan dieksekusi dalam urutan mereka muncul dalam file, sehingga tidak ada kejutan buruk, atau kebingungan tentang urutan eksekusi. Atau, Anda dapat memindahkan semua arahan Redirectdan RedirectMatcharahan secara fisik ke "bagian bawah" file, sehingga untuk mengingatkan diri Anda bahwa mereka tidak akan dieksekusi sampai setelah tanggal Rewrite.

Berikut adalah beberapa jawaban StackExchange yang baik yang telah dicerahkan ke titik ini:

Adapun sisanya, saya belum dapat menemukan info tentang kinerja antara menempatkan filessebelum atau sesudah rewrite, misalnya. Satu-satunya saran berbasis kinerja yang saya temukan, adalah bahwa jika seseorang memiliki akses ke file konfigurasi server, maka yang terbaik adalah memindahkan sebanyak mungkin dari file .htaccess ke file konfigurasi, dan menonaktifkan file .htaccess secara bersamaan (atau tentukan direktori spesifik tempat File .htaccess harus dibaca).

Logikanya ada aturan yang ditempatkan dalam file konfigurasi hanya perlu dibaca sekali. Jika pemrosesan htaccess dihidupkan, maka untuk setiap permintaan, setiap direktori server (pada atau lebih tinggi dari direktori yang diminta) harus dicari untuk kemungkinan file htaccess, apakah ada atau tidak. Dan jika mereka melakukannya, setiap orang harus dibaca lagi.

SherylHohman
sumber
-1

Saya memiliki masalah yang sama diposting tetapi ini adalah perspektif situs admin server yang memungkinkan mereka untuk me-restart apache setelah perubahan konfigurasi server apache.

Sejauh ini, respons terbaik yang saya terima adalah mendaftar arahan terkait File terlebih dahulu.

Ini masuk akal terkait dengan kebutuhan apache untuk mengelola direktori dan instruksi htaccess di setiap direktori.

Jadi, daftarkan file terkait arahan terlebih dahulu, kemudian blok yang jelas untuk mengakhiri proses htaccess apache dalam urutan yang jelas.

Solusi yang mungkin untuk mengoptimalkan permintaan: - meminta koreksi terkait url - Pembatasan terkait direktori - Pembatasan terkait indeks - Pembatasan terkait file - Pembatasan proxy <- Membunuh semua - Agen pengguna kosong <- Membunuh semua ... daftarnya menyenangkan tanpa akhir

Kekhawatiran saya terkait dengan urutan arahan. Misalnya, haruskah saya menetapkan arahan Index, file, dan Header sebelum RewriteConds?

Testbench
sumber
catatan kaki: substitusi pola RewriteRule [bendera] tidak menjawab pertanyaan pemrosesan aplikasi yang jelas ini!
Testbench