Htaccess kurallarını kullanarak bir php sayfası doğrudan yürütülmesini durdurmak nasıl?

6 Cevap php

Benim. Htaccess dosyasında I http://example.com/register/ olarak benim kayıt sayfası URL'sini yapmak için aşağıdaki kural tanımladığınız

RewriteRule register/ /register.php

Yukarıdaki kural gayet ama ben http://example.com/register/ gibi http://example.com/register.php den benim kayıt sayfasına erişebilirsiniz.

Ben bu kullanıcı http://example.com/register.php URL'den URL'ye erişmek mümkün olacak istemiyorum, ben register.php URL yürütülmesini durdurmak ya da sadece herhangi bir doğrudan kayıt yönlendirmek. Htaccess tanımlayabilirsiniz herhangi bir kural yoktur. php istek / kayıt /

6 Cevap

Eğer aynı içeriğe birden fazla bağlantı almamak için bu yapıyorsanız, sadece sayfanızda herhangi bir yere "register.php" kullanmamaktadır. Ben hiçbir arama motoru belirli bir dosya türü için "tahmin" olacağını düşünüyorum ve bence hiçbir kullanıcı ya bu dosyaya bağlantı edecek çünkü, güvenli tarafta hiçbir güvenlik endişeleri varsa. . Eğer emin olmak istiyorsanız Ancak sadece www-kök dizininde içine yerleştirilmiş etmelisiniz htaccess tek hat üzerinden bir index.php ile tüm işlevselliğini yeniden yönlendirmek:

RewriteEngine on
RewriteRule ^(.*?)$ index.php?file=$1

Lütfen index.php sonra sadece ["dosya"] aşağı kırılma ve $ _GET kontrol ederek çağırmak için parametre hangi fonksiyonu / dosya seçebilirsiniz. Hiç kimse% 100 emin olmak için register.php dosyaya erişebilir doğrudan, sadece taşımak (ve tüm diğerleri) ayrı bir dizine ve aşağıdaki satırı ile bir htaccess dosyası içerir.:

DENY from all

Doğrudan erişimi engellemek için diğer seçenekleri bir çift vardır. Sadece define() değişken bir yere index.php ve sadece koymak senin register.php üstündeki

defined('access') or die('Intruder alert!');

üst. Başka bir yolu dürüst olmak olmak ve sadece içerik taşındığını ve artık eski linki kullanınız gerektiğini arama motorları söyleyebilirdi:

header("Status: 301"); /* Content moved permanently */
header("Location: http://yourserver/Register/");
exit;

Update

Aklımdan sadece bir şey daha, ayrıca kullanıcı herhangi ". Php" bağlı ve tamamen ya da sadece yeni bir konuma yönlendirme ya inkar erişimi buna göre hareket edip, $_SERVER["REQUEST_URI"] kontrol edebilirsiniz.

Bu konum yönergesini kullanamazsınız doğrudur, ama aslında herhangi bir dizine. Htaccess dosyası yapıştırabilirsiniz.

Bunu içine koymak, sadece, ki:

Options -Indexes
order   allow,deny
deny    from all

Eğer dış yürütme korumak istediğiniz (kök) dizine bu dosyayı kopyalayıp yapıştırın.

İlk İstenen URL yolunu denetlemek için request line kullanmanız gerekir. Yani bu kuralı deneyin:

RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php[/?\s]
RewriteRule (.+)\.php$ /$1 [L,R=301]

Ve sonra tekrar kural (biraz değiştirilmiş bir şekilde):

RewriteRule ^register/$ register.php

Bu deneyin.

RewriteCond %{REQUEST_FILENAME} ^register\.php$ [NC]
RewriteRule ^/register register.php

Ya da bu

Redirect register.php /register

Kullanıcı deneyimi bölümünü yok sayarak, arama motorları dışarı sıralamak için new rel=canonical link uygulayabilirsiniz.

this durumda muhtemelen sadece gelen / / / Kayıt için register.php bir 301 yönlendirmesi kullanmak gerekir, ancak

Register.php yılında

if ( stristr( $_SERVER['REQUEST_URI'], '.php' ) )
{
    header ('HTTP/1.1 301 Moved Permanently');
    header ('Location: /register');
}

Tamamen kullanarak / register.php engellemek istiyorsanız mod_rewrite, SleepyCod cevabı bir varyantını kullanın:

RewriteCond %{REQUEST_FILENAME} register\.php [NC]
RewriteCond %{IS_SUBREQ} false
RewriteRule .* - [F,L]

Açıklama:

  • [NC]: Makes harf duyarsız, sadece durumda bir pencere kutusu konum durumdur.
  • Durum 1: İstenen dosya 'register.php' olduğunu, and
  • Durum 2: istek no (RewriteRules aracılığıyla her yeni tur aslında alt istekler yaratır çünkü bu, önemlidir) İstek içi.
  • Kural: aslında hiçbir şey
  • Bayraklar: [F]: Bir 403 Yasak başlığı gönder, [L]: Bu, geçerli olan tüm aşağıdaki kuralları yeniden atlamak için son kural

Doğru yeniden tek başına bir sanattır. Ben dikkatle okumanızı öneririz http://httpd.apache.org/docs/2.2/rewrite/.

Alkış,