Apache 2.4.7’de htaccessi etkinleştirmek için bu doğru bir yol mu?


46

"Htaccess nasıl etkinleştirilir?" İn hemen hemen her çözümünde / etc / apache2 / sites-available / default dosyasının düzenlenmesi gerektiğini söylüyorlar. Ancak Apache 2.4.7'de böyle bir dosya yok.

Bir yerde yeni varsayılan dosyanın 000-default.conf olduğunu okudum. Bu yüzden bunu düzenledim ve satır eklemeye çalıştım:

AllowOverride All

Ancak Apache2 doğru şekilde yeniden başlatılmadı ve bir hata verdi. Bir apache2 belgesinde, AllowOverride'a sadece <Directory>bölümün altında izin verildiğini gördüm . Sonra şunu eklemeye çalıştım:

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

Ve bu iş gibi görünüyor. Ama orada / var / www koymam gerekip gerekmediğinden emin değilim. Bunu yapmanın doğru bir yolu mu yoksa bilgisayarım bir şekilde patlayacak mı?


bunu gör. Size yardımcı olabilir. stackoverflow.com/questions/33062142/…
Avnish alok

Yanıtlar:


58

tl; Dr.

Evet doğru yol.
Ancak daha anlamsal olmak için : Evet, dizindeki .htaccesstüm yönergeleri geçersiz kılmanın en doğru yolu budur /var/www.


Gördüğünüz gibi, AllowOverridesadece bu Directorybölümün altında izin verilir .

Örneğinizi kullanarak:

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

Bu, apache'ye, tüm yapılandırmaların /var/wwwve tüm alt dizinlerinde (tekrarlı olarak) geçersiz kılınabileceğini söylüyor .


Daha iyi bir örnek için sanal sunucunuzda aşağıdaki yapılandırmayı yaptığınızı düşünün:

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

<Directory "/var/www/uploads">
    AllowOverride Limit
</Directory>

Ve aşağıdaki dizin yapısı:

var/
    www/
        .htaccess
        uploads/
            .htaccess
            a/
                .htaccess
            b/
                .htaccess
        code/
            .htaccess
            c/
                .htaccess
            d/
                .htaccess

Burada yaptığım şey, .htaccessdizinin her alt dizininde bir /var/wwwdizin oluşturmak.
Genelde böyle olmamalıydı, ama bu sadece örnek uğruna

Dizin yapısını yapılandırma ile karşılaştırarak, klasör ve .htaccessiçindeki /var/wwwalt dizinlerin içindeki tüm dosyaların , /var/www/uploadsdizin ve alt dizinleri hariç olmak üzere her türlü yönergeyi geçersiz kılabileceği anlamına gelir.

Ama /var/www/uploadsve alt dizinleri sadece kullanabilirsiniz .htaccessgeçersiz kılmak için dosyayı Allow, Denyve Orderdirektifleri.

Not: apache 2.4'ten itibaren (Varsayılan olarak 13.10+ sürümünde bulunur) Allow, Denyve Orderyönergeleri, adındaki tek bir yönergeyle değiştirildi Require.


39

İlk önce bu komutu kullanarak yeniden yazmayı etkinleştirin:

sudo a2enmod rewrite

Sonra apache2'yi yeniden başlatın:

sudo service apache2 restart

Ardından sites-availableklasöre gidin :

/etc/apache2/sites-available

Düzen adlı dosya defaultve değişim AllowOverride noneiçin AllowOverride All. Bu değişikliğin yapılması gereken iki satır var.

Bu, .htaccesssunucunuzun VPS'sinde çalışacaktır.

Bu bir Ubuntu 12.04.5 VPS'de çalıştı.


3
default adlı bir dosya yok - ancak 000-default.conf adında bir dosya var
Tahir Yasin

1
Yeniden yazmayı etkinleştirmeyi hatırlatmak için +1, bunu özlüyordum ve neden her şeyi yaptıktan sonra çalışmadığını anlayamadım.
Abdul Mannan

Bu yorum, 2.4 değil Apache 2.2'nin yapılandırmasını ifade eder. 2.4'te defaultdosya çağrılır 000-default.confve AllowOverride Nonesatır içermez .
ben_nuttall

dosyasıdır 000-default.confve eklemek mümkün değildir AllowOverride NoneEğer apache vermek hatası, dolum yaparken burada
KREKER

İhtiyacınız olan tek şey mod_rewrite yönergelerinin geçersiz kılınmasına izin vermekse .htaccess, kullanımı daha iyidir AllowOverride FileInfo. Her ne kadar FileInfo zaten büyük bir yönergeler kümesi içeriyorsa da, birçok yönergenin geçersiz kılınmasını hala kısıtlıyor olabilirsiniz.
Dan,

3

Benim durumumda, böyle çalıştı:
Aşağıdaki satırları eklemek zorunda kaldı:

Order allow, deny
Allow from all

Yani şöyle görünüyor:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

Bu sorununuzu çözmüş olsa da, OP'nin sahip olduğu soru ile ilgili değildir. Sipariş ve izin yönergeleri apache2.2 ve önceki sürümlerdeki yönergelerdir. Belirli dizinlerde bulunan kullanıcılara erişim izni vermek / reddetmek için kullanılırlar. Bir .htaccess dosyasındaki direktiflerin ayrıştırılıp ayrılmayacağı üzerinde herhangi bir etkisi yoktur.
Dan

2

İşte Apache 2.4'te htaccessin nasıl aktif hale getirileceğini gösteren bir pasaj.

cat <<EOF> /etc/apache2/conf-available/allow-override.conf
<Directory "/var/www">
    AllowOverride all
</Directory>
EOF

a2enconf allow-override
service apache2 reload
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.