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.