Apakah ada cara untuk mendeteksi dukungan ekspresi reguler dalam file htaccess?

1

Saya menggunakan aturan penulisan ulang berikut untuk meneruskan seluruh url ke skrip php:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*?)$ index.php?rewriteUrl=$1 [QSA,L]

Pada beberapa server, saya harus menggunakan

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

sebagai gantinya (yang ?hilang).

Apakah ada cara untuk membuat server menangani ini secara otomatis? Dalam bentuk fallback / try-catch atau semacamnya?

Blauesocke
sumber
Saya tidak bisa mengatakan saya mengerti pertanyaan Anda atau maksud memiliki ?dalam ekspresi. Untuk informasi tentang penggunaan ekspresi reguler dalam mod_rewrite, silakan lihat dokumentasi Apache .
quentinxs

Jawaban:

1

Jika Anda mengetahui nomor versi yang berbeda antara kedua server, gunakan mod_version untuk melakukan ini. Misalnya, jika 2.3+ menggunakan ?:

<IfVersion >= 2.3>
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*?)$ index.php?rewriteUrl=$1 [QSA,L]
</IfVersion>

<IfVersion < 2.3>
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?rewriteUrl=$1 [QSA,L]        
</IfVersion>

Gunakan ServerSignature untuk mengirim info versi ke klien.

Paul Sweatte
sumber