PHP include () mod_rewrite'ı etkilenen

4 Cevap php

Kimin çıkış programlı değiştirmek gerekiyor fena halde kodlu PHP dosyaların sayısını, miras var.

Bunu başarmak için, ben yaklaşık bu gibi görünüyor başka bir PHP dosyası, rewriter.php aracılığıyla bunları çalıştırmak için seçti:

<?php
if(!preg_match('/^([a-zA-Z0-9\-_]*)$/', $_GET['page']))
  die('Incorrect page supplied.');
ob_start('changeOutput');

include($_GET['page'].'.php');
ob_end_flush();

function changeOutput ($buffer) {
  ...
}
?>

Ben bu dosya üzerinden çalıştırmak için onları zorlamak için mod_rewrite kullanımı:

RewriteEngine On
RewriteRule ^([^\.]*)\.php$ rewriter.php?page=$1

Ancak bir hata mesajı bana () deyimi yani böylece rewriter.php aracılığıyla rewriter.php çalıştırmayı dener ve yukarıda RewriteRule etkilenen dahil inanıyorum kılan görüntülenir.

Ben (mod_rewrite'ı etkilenmeden) deyimi var, bu sorunu çözmek için birçok yolu vardır ama ben özellikle dahil kaçmak için bir yol arıyorum varsayalım. Ben modülü belgelerine baktım ama alakalı bir şey bulamadı.

Tabii ki, bu yaklaşım için alternatifler çok açıktır.

Zaman ve düşünme için teşekkür ederiz.

Best regards,
Daniel

4 Cevap

Aslında mod_rewrite'ı için bir koşullu ifadedir RewriteCond, arıyoruz gibi geliyor

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !rewriter.php$
RewriteRule ^([^\.]*)\.php$ rewriter.php?page=$1 [L]

Bu rewriter.php sona URL'lerin uygulanacak olmaktan kural önleyecektir.

Dosya dahil etmeden önce varsa önce kontrol etmelisiniz:

if ($_GET['page'] != 'rewriter' && is_file($_GET['page'].'.php')) {
    include $_GET['page'].'.php';
} else {
    // file does not exist or is invalid
}

Sen dosyanın var olmadığını görmek için kontrol edecek htaccess koşullu bir RewriteCond ekleyebilirsiniz. Biraz daha hızlı (ve daha hafif kod-bilge) dışında bamya tarafından açıklama, benzer.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^([^\.]*)\.php$ rewriter.php?page=$1

Bu web sitenizin kök dizinine göreli bir dosya veya dizin olup olmadığını görmek için denetler. Eğer durum bu ise, o rewriter kaçıyorum. . Htaccess awesomeness :) hızlı bir dokunuş

Eğer dosya sistemine bakın yapmak ve mod-rewrite çeviri motoru bypass yolu kullanılır içerir.

Ben normal ifadenizi izlemek istiyorsunuz.

/^([a-zA-Z0-9\-_]*)$/

de boş dize maç.

Denemek

/^([a-zA-Z0-9\-_]+)$/

$ _GET ['sayfa'] boş olup olmadığını görmek.