Apache 2.2 için mod_rewrite nasıl etkinleştirilir


474

Vista makineme Apache 2.2'nin yeni yüklemesini aldım, mod yeniden yazma dışında her şey iyi çalışıyor.

Tavsiye etmedim

LoadModule rewrite_module modules/mod_rewrite.s

ama yeniden yazma kurallarımın hiçbiri işe yaramıyor,

RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404

Kullandığım tüm kurallar barındırma üzerinde çalışıyor, bu yüzden tamam olmalılar, bu yüzden sorum şu: apache yapılandırmasında mod yeniden yazmayı engelleyebilecek herhangi bir gizli şey var mı?


1
Aslında sorun ben yanlış yolu vardı, çünkü $ {DOCUMENT_ROOT} beni barındırma Tamam, ama yerel yanlış dizine işaret etti, bu yüzden sorun sadece zaten vardı RewriteEngine On, değildi ..
Jakub Arnold

Size kabul cevabı lütfen değiştirin Can bu bir ? Mevcut kabul edilen cevabın yazarı, bunun yeterince iyi olmadığını itiraf etti.
Gölge Sihirbazı Senin için Kulak

1
Ubuntu 12.04 LTS'de mod_rewrite nasıl etkinleştirilir (Debian'da da çalışmalıdır) . Bu kurulum ve aktivasyonu gösterir, aşağıdaki öğreticiler şaşırtıcı bir şekilde yapmazlar :(
Sliq

3
AllowOverride FileInfoBu sayfadaki TÜM yanıtların önerdiği gibi .htacces dosyalarında mod_rewrite yönergelerini etkinleştirmek isteyen herkese her şeye izin vermek yerine kullanmasını şiddetle tavsiye ederim . Tüm bu cevapların, önerilen 'çözümün' sonuçlarını anlamaya çalışmak yerine, işe yaradığı kadar uzun bir yaklaşım aldığını görmek üzücü. Sunucunuzda ne yaptığınızı ve az önce verdiğiniz ayrıcalıkları nasıl sınırlandıracağınızı anlamaya çalışın AllowOverride All. KKO! , konuyla ilgili net olarak bırakılmıştır.
RemyNL

1
@Black httpd.conf adlı Apache yapılandırma dosyasındadır. Bilgisayarımda, Apache'yi XAMPP ile kurduğum için C: \ xampp \ apache \ conf dizininde.
Lex Soft

Yanıtlar:


1005

Kullanmak için mod_rewriteterminalde aşağıdaki komutu yazabilirsiniz:

sudo a2enmod rewrite

Sonra apache2'yi yeniden başlat

sudo /etc/init.d/apache2 restart

veya

sudo service apache2 restart

veya yeni birleşik Sistem Kontrol Yolu uyarınca

sudo systemctl restart apache2

Ardından, aşağıdaki .htaccessdosyayı kullanabilirsiniz .

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

Yukarıdaki .htaccessdosya (içine yerleştirilirse DocumentRoot) , dosya yoksa index.php, tüm trafiği bir dosyaya yönlendirir DocumentRoot.

Diyelim ki aşağıdaki dizin yapısına sahipsiniz ve httpdocs DocumentRoot

httpdocs/
    .htaccess
    index.php
    images/
        hello.png
    js/
        jquery.js
    css/
        style.css
includes/
    app/
        app.php

Httpdoc'larda bulunan tüm dosyalar, .htaccessyukarıda gösterilenleri kullanarak talep sahibine sunulacaktır , ancak diğer her şey yeniden yönlendirilecektir httpdocs/index.php. İçindeki uygulama dosyalarınıza includes/apperişilemez.


15
Buradaki fikirler UNIX CLI için doğrudur, ancak komutlar OP'nin Windows ortamı için değil, yalnızca Debian tabanlı Linux dağıtımları için çalışır.
Jason Rikard

17
a2enmod rewrite iş yaptı
Dr Casper Black

98
Daha not: ayrıca emin sitenizin yapılandırma olduğunu yapmak gerekir AllowOverride Allsırayla .htaccessdosya hiç okunacak.
Adam Rosenfield

2
@Dennis a2dismod yeniden yazma kullanabilirsiniz
Jonathan Mayhak

3
a2enmod rewritepencerelerde nasıl kullanabilirim ?
Naman

229

Durumum için,

RewriteEngine On

benim .htaccess, modül yüklü ile birlikte, ve çalışma değildi.

Sorunumun çözümü vhost girişimi inlcude olarak düzenlemekti

AllowOverride all

söz konusu <Directory>sitenin bölümünde.


10
Nitekim bile a2enmod rewrite& RewriteEngine Oniçinde .htaccess- varlığı AllowOverride allVirtualHost dosyasında çalışmasını engelleyebilecek - bu değiştirmeyi, beni yakaladı ne AllowOverride all:) harika çalıştı
HeavenCore

9
acemi burada .. VirtualHost dosyası nerede?
davneet

3
BU gidilecek yoldur ... Bunun dışında her şeyim vardı.
Mart'ta dizisi

2
AllowOverrideYönerge "bulunmasına izin verilen yönerge türleri belirleyen .htaccessdosyaları". Ayrıca, "Bu yönerge olarak ayarlandığında None, .htaccessdosyalar tamamen yok sayılır. Bu durumda, sunucu .htaccessdosya sistemindeki dosyaları okumaya bile çalışmaz ." Resmi dokümanlar: httpd.apache.org/docs/2.2/mod/core.html#allowoverride
John Erck

Bu benim için düzeltildi - WordPress ile ilgili bir sorun yaşadım oldukça kalıcı bağlantılar düzgün çalışmıyor. Bunu yaparsanız a2enmod rewriteve sonra VirtualHosts dosyasında 'AllowOverride None' değerini 'AllowOverride All' olarak değiştirin. Aynı sunucuya (ve IP adresine) birden çok etki alanı adı çalıştırıyorsanız, VirtualHosts dosyası uygulanır. Alan adını ayarlamak için ayarlamış olursunuz.
Jason Preston

83

Ayarlamayı deneyin: AllowOverride All.


İkinci en yaygın sorun mod yeniden yazma etkin değil: a2enmod rewriteve sonra apache yeniden başlatın.


Bu varsayılan bir ubuntu kurulumunda meydana gelen bir sorunu çözdüğü için # 1 yanıtı olmalı!
Sliq

1
Bu, .htaccess öğesinin diğer apache yapılandırmasını geçersiz kılmasına izin verir. Bu önerilmez.
Bhargav Nanekalva

Evet :) bu da benim sorunumdu, ama işte benim gibi çaylaklar için açıkladığınız yer bu "AllowOverride All" /etc/apache2/sites-available/[sitename Cialis.conf ve [sitename-ssl] .conf. Senin yüzünden ikinci bir araştırma yapmak zorunda kaldım: D, bu arada teşekkürler!
MetaTron

77

Yukarıdaki çalışmaların hiçbiri / etc / apache2 / sites özellikli / 000 varsayılanı düzenlemeyi deneyin

neredeyse en üstte bulacaksınız

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

Değişim AllowOverride NoneToAllowOverride All

bu benim için çalıştı


Hata - olarak /laravel/public/authors was not found on this serverdeğiştirildi/index.php was not found on this server
Gangaraju

<Directory> bulamıyorum sadece <VirtualHost *: 80>
Nicolas S.Xu

1
@ NicolasS.Xu bunu <VirtualHost *: 80> etiketine yerleştirin
wimdetr

Aynı şeyi yaptım ancak <Directory /var/www/html>kuralı bu klasörden ve sadece yukarıdan uygulamak için yeni bir bölüm ekledim .
Louis Loudog Trottier

44

Ubuntu'da:

Çalıştırmak:

a2enmod rewrite

ve sonra:

service apache2 restart

mod_rewrite şimdi etkinleştirilecek!


28

Sorunun kökünü biliyorsanız, bu sorunu çözmenin birçok yolu vardır.

Sorun 1

İlk olarak, apache'nizde mod_rewrite.c modülünün kurulu olmaması veya etkin olmamasıyla ilgili bir sorun olabilir.

Bu nedenle, aşağıdaki gibi etkinleştirmeniz gerekir

  1. Konsolunuzu açın ve içine yazın:

    sudo a2enmod rewrite

  2. Apache sunucunuzu yeniden başlatın.

    service apache2 restart

Sorun 2

  1. Yukarıdakilere ek olarak, eğer işe yaramazsa, geçersiz kılma kuralını apache conf dosyasından (apache2.conf, http.conf veya 000-varsayılan dosya) değiştirmeniz gerekebilir.

  2. "Directory / var / www /" dizinini bulun

  3. "Hiçbirini Geçersiz Kıl" ı "Tümünü Geçersiz Kıl" olarak değiştirin

Sorun 3

Yeniden yazma modülünün bulunmadığını belirten bir hata alırsanız, muhtemelen userdir modülünüz etkin değildir. Bu nedenle etkinleştirmeniz gerekir.

  1. Konsola şunu yazın:

    sudo a2enmod userdir

  2. Ardından, hala etkin değilse yeniden yazma modülünü etkinleştirmeyi deneyin (yukarıda belirtildiği gibi).

Bu konuda daha fazla okumak için bu siteyi ziyaret edebilirsiniz : http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html


2
Sorunun büyük dökümü.
Banago

Kullanmayın AllowOverride Allo (komut perl kullanmak gibi) çok fazla Dangerours özelliklerini sağlayacak şekilde. Bunun yerine kullanınAllowOveride Options
Marki555

28

Yeni apache sürümü bir şekilde değişti. Apache sürümünüz 2.4 ise o zaman gitmelisiniz /etc/apache2/. Adlı bir dosya olacak apache2.conf. Bunu düzenlemelisiniz (root iznine sahip olmalısınız). Dizin metnini böyle değiştirin

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

Şimdi apache'yi yeniden başlatın.

service apache2 reload

Umarım çalışır.


Bu güncel cevap.
paulc

1
2019 ve sonrasındaysanız, lütfen bu cevabı oylayın :)
Luiz Cavalcanti

27

Terminali aç ve yaz a2enmod rewrite, mod_rewriteModülünü Apache için etkinleştirecek .

Ardından /etc/apache2/sites-availablevarsayılan dosyaya gidin ve düzenleyin. (Bunun için bu dosyaya ve sitelerde bulunan klasöre yazılabilir izinlerinizin olması gerekir.)

Aşağıdakileri 4 ila 14 arasındaki mevcut satırlarla değiştirin

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

Şimdi apache'nizi /etc/init.d/apache2 restartveya ile yeniden başlatınservice apache2 restart

Temiz URL testini tekrar yapın ve bu sefer geçilecek.


15

<Edit>

Sadece mod_rewrite.so yerine mod_rewrite.s dediğini fark ettiniz - umarım bu soruda bir yazım hatasıdır ve httpd.conf dosyasında değil! :)

</ Edit>

Daha çok Linux'ta Apache kullanmaya alışkınım, ama bunu geçen gün yapmak zorunda kaldım.

Öncelikle Apache kurulum dizininize bir göz atın. (Burada "C: \ Program Files" klasörüne yüklediğinizi varsayacağım)

Şu klasöre bir göz atın: "C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ modules" ve mod_rewrite.so adında bir dosya olduğundan emin olun. (Varsayılan kurulumun bir parçası olarak sağlanmalıdır.

Ardından, "C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ conf" dosyasını açın ve httpd.conf'u açın. Doğru olduğundan emin olun:

#LoadModule rewrite_module modules/mod_rewrite.so

önerilmiyor:

LoadModule rewrite_module modules/mod_rewrite.so

Ayrıca, RewriteEngine'ı varsayılan olarak etkinleştirmek isterseniz, aşağıdaki gibi bir şey eklemek isteyebilirsiniz:

<IfModule mod_rewrite>
    RewriteEngine On
</IfModule>

httpd.conf dosyanızın sonuna.

Değilse, belirttiğinizden emin olun.

RewriteEngine On

.htaccess dosyanızın bir yerinde.


@gabehabe senin avatar sadece bir simge tutan gibi görünüyordu benim doktor, lol
Jonathan dos Santos

5

Sadece yaptım

sudo a2enmod rewrite

o zaman aşağıdaki komutu uygulayarak apache servisini yeniden başlatmanız gerekir

sudo service apache2 restart


4

Aşağıdaki komutu kullan

sudo a2enmod rewrite

Ve aşağıdaki komutu kullanarak apache'yi yeniden başlat

sudo service apache2 restart

3

Açıkçası bunu yapmak için birden fazla yolu var, ama daha standart kullanmanızı öneririz:

ErrorDocument 404 /index.php?page=404

3

Ben mod_rewrite kuralları, trafik görmezden ile mücadele ilk kez, ben yanlış yerleştirdi ettiğini (bombalanmasını) öğrenilen <VirtualHost>Trafiğim görmezden anlamına geliyordu, hepsi olduklarını iyi yazılmış ne kadar olursa olsun onlardan. Bunun sizin başınıza gelmediğinden emin olun:

# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2

Bu parametreler, Apache'nin zarif bir şekilde yeniden başlatılması durumunda etkinleştirilir, böylece bunları geri dönüştürebilir ve mod_rewrite davranışını yakından izleyebilirsiniz. Sorununuz çözüldükten sonra RewriteLogLevel'i geri çevirin ve kutlayın.

Deneyimlerimin% 100'ünde, RewriteLog'un sorunu yeniden yazma kurallarımda keşfetmeme yardımcı olduğunu buldum. Bunu yeterince tavsiye edemez. Sorun giderme konusunda iyi şanslar!

Ayrıca, bu yer işareti en iyi arkadaşınızdır: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog


2

Benim için ne işe yaradı (ubuntu'da):

sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load

Ayrıca, daha önce de belirtildiği gibi AllowOverride all, ilgili bölümün/etc/apache2/sites-available/default

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.