.htaccess apache çalışmıyor


135

Linux ubuntu üzerinde çalışan AWS EC2 hizmetinden bir sunucum var ve apache, php ve mysql yükledim.

.htaccessBelge köküme bir dosya ekledim /var/www/html.

Bu kodu girdim: ErrorDocument 404 /var/www/html/404.phpve hala görünmüyor.

Bu komutu birden çok kez girdim: sudo service httpd restartsunucuyu yeniden başlatmak ama hiçbir değişiklik görüntülenmiyor ...

Bunu nasıl düzeltebilirim ... Yanlış bir şey mi yaptım?

Şimdiden teşekkürler!


2
400 Bad RequestHatayı şuna eşlemek istediğinizden emin misiniz /var/www/html/404.php?
Jon Lin

Yanıtlar:


288

İlk olarak, httpd'nin yeniden başlatılmasının .htaccess dosyaları için gerekli olmadığını unutmayın. .htaccess dosyaları özellikle root sahibi olmayan kişiler içindir - yani, httpd sunucusu yapılandırma dosyasına erişimleri yoktur ve sunucuyu yeniden başlatamazlar. Sunucuyu yeniden başlatabildiğiniz için, .htaccess dosyalarına ihtiyacınız yoktur ve doğrudan ana sunucu yapılandırmasını kullanabilirsiniz.

İkinci olarak, .htaccess dosyaları yoksayılıyorsa AllowOverride öğesinin doğru ayarlandığını kontrol etmeniz gerekir. Ayrıntılar için http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride adresine bakın. Ayrıca, doğru kapsamda ayarlandığından da emin olmanız gerekir - yani, yapılandırmanızdaki sağ blokta. Örneğin, bloktaki düzenlemeyi YAPMADIĞINIZDAN emin olun .

Üçüncü olarak, bir .htaccess dosyasının gerçekten okunduğundan emin olmak istiyorsanız, içine çöp koyun. .Htaccess dosyanızdaki "INVALID LINE HERE" gibi geçersiz bir satır, tarayıcınızı bu dosyayı içeren dizine yönlendirdiğinizde 500 Sunucu Hatasına neden olur. Başlamazsa AllowOverride'ı doğru yapılandırmamışsınız demektir.


141
Bir tanı aracı olarak .htaccess dosyasına çöp koymak için +1.
retrohacker

46
Programlamadaki çöpler göründüğünden daha kullanışlıdır.
EnKrypt

1
Ben putted "A STRING" Bir hata alırsınız diye, ben putted yüzden, benim .htaccess AllowOverride Alltüm apache2.confbenim Debian ve çalışır
Alex

1
Not AllowOverridesadece çalışır <Directory>direktifleri ve içine yerleştirilmiş ise göz ardı edilecektir <Location ...>bölümünde, bkz: httpd.apache.org/docs/2.4/mod/core.html#allowoverride
Daniel Sokolowski

2
Ayrıca <Directory>yönergenin göreli yerine mutlak bir yol beklediğini unutmayın . Benim durumumda çalışırken <Directory /> başarısız oldu<Directory /var/www/html/subdir> .
Lukas Knuth

115
  1. Apache mod_rewrite modülünü etkinleştir

    a2enmod rewrite

  2. şu kodu ekle /etc/apache2/sites-available/default

    AllowOverride All

  3. Apache'yi yeniden başlat

    /etc/init.d/apache2 restart


7
Apache 2.4'te / etc / apache2 / sites-available altındaki yapılandırma dosyalarının şimdi .conf ile bitmesi gerektiğini unutmayın. Ve sunucumda bir default.conf / etc / apache2 / sites-available ve bir / etc / apache2 /
rubo77

2
Teşekkürler, benim durumumda yeniden yazma apache2
Cross

ben zaten bu adımları izleyin ama apache 2.4 ne yanlış yapıyorum ne çalışmıyor = [
Luciano Andress Martini

Ip geçersiz kılmaları gerektiriyor gibi görünüyor, kimlik doğrulaması gerektiriyor, bu davranış beklenmedik (apache 2.2'deki belirli iplerden izin ver) ve bence çok tehlikeli olabilir, çünkü ip istisnası kimlik doğrulamayı canlandırıyor, apache 2.2'de tamamen farklı şeyler !
Luciano Andress Martini

İlk adımı atladım ama benim apache.conf (Debian 8, /etc/apache2/apache.conf) içinde AllowOverride'ı All olarak değiştirdim, yeniden başlatıldı ve dosyalara erişilemiyor, iyi. Ancak hata izin reddedilmiş gibi değil, 500 Dahili Sunucu Hatası gibi, neden böyle? Düzeltebilir miyim?
dasLort

44

Yukarıdakilerin hepsini denediyseniz, hepsi geçerli ve iyi yanıtlardır ve htaccess dosyanız çalışmıyor veya okunmuyorsa, apache2.confdosyadaki yönergeyi değiştirin . Ubuntu altında yol/etc/apache2/apache2.conf

<Directory>Htaccess dosyasının bulunduğu genel web sayfalarınızı işaret eden yönergeyi değiştirin . Konumundan olarak AllowOverride NonedeğiştirAllowOverride All

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Ben de aynı sorunu vardı ve Ubuntu Ask cevap ve açıklama bulundu! forum /ubuntu/421233/enabling-htaccess-file-to-rewrite-path-not-working


2
Veya VHost'a eklenebilir
ssi-anik

Aslında, dosyanın okunması ve kullanılması AllowOverride FileInfoiçin yalnızca 3. satırda gereklidir .htaccess. Allayrıca .httpasswd(bunun Authconfigyerine tek tek etkinleştirilebilen) gibi ek yapılandırma geçersiz kılmalarını da etkinleştirir All.
Rafal

20

İçin Ubuntu,
Birinci, bu komutu çalıştırın: -

sudo a2enmod rewrite

Ardından, /etc/apache2/sites-available/000-default.confbu komutu kullanarak nano veya vim kullanarak dosyayı düzenleyin : -

sudo nano /etc/apache2/sites-available/000-default.conf

Sonra 000-default.confdosyaya, bu satırdan sonra ekleyin DocumentRoot /var/www/html. Kök html dizininiz başka bir şeyse, şunu yazın: -

<Directory "/var/www/html">
  AllowOverride All
</Directory>

Her şeyi yaptıktan sonra, komutunu kullanarak apache'yi yeniden başlatın sudo service apache2 restart


6

Sadece 3 adımı takip et

  1. Aşağıdaki komutu kullanarak mode_rewrite özelliğini etkinleştirin

    sudo a2enmod yeniden yazma

Şifre istenecektir. Bu yüzden şifrenizi girin

  1. / Etc / apache2 / sites-available / dizininde bulunan 000-default.conf veya default.conf dosyanızı güncelleyin . doğrudan düzenleyemezsiniz. açmak için aşağıdaki komutu kullanın

    sudo gedit /etc/apache2/sites-available/000-default.conf

Veya sudo gedit /etc/apache2/sites-available/default.conf

Alacaksın

DocumentRoot / var / www / html

VEYA

DocumentRoot / var / www

hat. Sonrasında aşağıdaki kodu ekleyin.

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Kullanıcıyı dizin etiketi yolu dosyanızda gösterilenle aynı yapın.

  1. Aşağıdaki komutu kullanarak apache sunucunuzu yeniden başlatın

    sudo service apache2 yeniden başlatma


Teşekkürler. Brezilya'dan selamlar.
Fox.11

5

Büyük olasılıkla AllowOverride Yok olarak ayarlanmıştır. / etc / apache2 klasöründe bulunan apache2.conf dosyasının Dizin bölümünde

Tümüne İzin Ver olarak ayarlamayı deneyin


5

Deneyimlerime göre, / var / www / directory yönergesi alt klasör sanal ana bilgisayar yönergelerini engeller. Yani tüm önerileri denemiş ve hala çalışmıyor ve sanal ana bilgisayar kullanıyorsanız bunu deneyin;

1 - AllowOverride AllYönergeniz olduğundan emin olun . /etc/apache2/sites-available/example.com.conf

2 - / var / www / dizin yönergelerini kontrol edin /etc/apache2/apache2.conf(muhtemelen 164. satırda);

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Eğer bir AllowOverride Noneyönerge varsa, onu değiştirin AllowOverride All veya sadece kaçış hattına geçin


3

Varsayılan olarak Apache, yeniden yazma kurallarını uygulamak için bir .htaccess dosyası kullanılmasını yasaklar;

Adım 1 - mod_rewrite'ı etkinleştirme (Etkin değilse) Önce mod_rewrite'ı etkinleştirmemiz gerekir. Temiz bir Apache 2 kurulumuyla kullanılabilir ancak etkin değildir.

$ sudo a2enmod rewrite

Bu modülü etkinleştirir veya modülün zaten etkin olduğunu bildirir. Bu değişiklikleri yürürlüğe koymak için Apache'yi yeniden başlatın.

$ sudo systemctl restart apache2

mod_rewrite artık tamamen etkin. Bir sonraki adımda, yönlendirmeler için yeniden yazma kurallarını tanımlamak için kullanacağımız bir .htaccess dosyası oluşturacağız.

Adım 2 - .htaccess'i Ayarlama Nano veya favori metin düzenleyicinizi kullanarak varsayılan Apache yapılandırma dosyasını açın.

$ sudo nano /etc/apache2/sites-available/000-default.conf

Bu dosyanın içinde, ilk satırdan başlayarak bir blok bulacaksınız. Bu bloğun içine, yapılandırma dosyanızın aşağıdaki gibi görünmesi için aşağıdaki yeni bloğu ekleyin. Tüm blokların düzgün girintili olduğundan emin olun.

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    . . . 
</VirtualHost>

Dosyayı kaydedip kapatın. Bu değişiklikleri yürürlüğe koymak için Apache'yi yeniden başlatın.

$ sudo systemctl restart apache2

Bitti. .Htacess'iniz çalışmalıdır. Bu bağlantı aslında birine https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04 yardımcı olabilir


Benim için çalışan yeniden başlatma komutu $ sudo httpd -k restart(Red Hat 4.4.7-23)
Himalaya Garg


1

In WampServerAçık Baby Tepsi simgesi ----> Apache ---> Apache Modülleri ---> rewrite_module



0

Tamlık için, "Tümüne İzin Ver" sorununuzu çözmezse, bu sorunu kullanarak hata ayıklayabilirsiniz:

  1. Çalıştırın apachectl -Sve birden fazla namevhost'unuz olup olmadığını görün. Httpd başka bir DocumentRoot'un .htaccess dosyasını arıyor olabilir.

  2. Kullanım strace -f apachectl -Xve 's yükleme (veya yükleme) den .htaccess nereye bakış.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.