Sunucuda mod_rewrite'ın etkin olup olmadığı nasıl kontrol edilir?


104

Şu anda hosting hizmetini lightspeed sunucusu ile kullanıyorum . Hosting mod_rewriteetkinleştirildi diyor ancak betiğimin orada çalışmasını sağlayamıyorum. URL'ye her erişmeye çalıştığımda, 404 - bulunamadı sayfası döndürüyor .

Aynı kodları Apache ile çalışan başka bir sunucuya koydum. Orada çalışıyor. Yani sanırım bu .htaccessve mod_rewritesorunu.

Ancak barındırma desteği hala mod_rewrite'larının açık olduğu konusunda ısrar ediyor, bu yüzden gerçekten etkin olup olmadığını nasıl kontrol edebileceğimi bilmek istiyorum.

Kontrol etmeye çalıştım phpinfo()ama şans yok, mod_rewriteorada bulamıyorum , kullandıkları için lightspeedmi?

Kontrol etmenin bir yolu var mı? Lütfen bana yardım edin. Teşekkür ederim.

Bilginize: benim .htaccesskodum

Options -Indexes

<IfModule mod_rewrite.c>
DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
</IfModule>

Ben de böyle denedim

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

Ama aynı sonuç.

Yanıtlar:


99

komut satırından yazın

sudo a2enmod yeniden yaz

yeniden yazma modu zaten etkinleştirilmişse, size bunu söyleyecektir!


Mod yeniden yazmayı etkinleştirmenin en kolay yolu budur.
andromeda

3
EVET ! Mükemmel, sadece mükemmel.
George Dimitriadis

Çalıştı. Basit ve kolay. Teşekkürler
biplab rotası

97
  1. Mod_rewrite modülünün etkin olup olmadığını kontrol etmek için, WAMP sunucunuzun kök klasöründe yeni bir php dosyası oluşturun. Aşağıdakileri girin

    phpinfo();

  2. Oluşturduğunuz dosyaya tarayıcınızdan erişin.

  3. CtrlFbir arama açmak için. 'Mod_rewrite' araması yapın. Etkinleştirilirse, 'Yüklü Modüller' olarak görürsünüz

  4. Değilse, httpd.conf (Apache Yapılandırma dosyası) açın ve aşağıdaki satırı arayın.

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. Başlangıçta pound ('#') işaretini kaldırın ve bu dosyayı kaydedin.

  6. Apache sunucunuzu yeniden başlatın.

  7. Tarayıcınızda aynı php dosyasına erişin.

  8. "Mod_rewrite" ı tekrar arayın. Şimdi bulabilmelisin.


9
PHP'nin kendisi bir Apache modülü olarak çalıştırıldığında phpinfo () 'nun Apache Yüklenmiş Modülleri rapor ettiğine inanıyorum . OP, PHP'nin kendi mod_rewrite uyumlu yeniden yazma motoruna sahip olan Lightspeed üzerinde çalıştığını belirtir.
MrWhite

2
İlk adım için şunu girmem gerekiyordu: <? Php echo phpinfo (); ?>
Greg Noe

7
PHP'yi bir CGI uygulaması olarak çalıştırıyorsanız bu yöntemin çalışmayacağına dikkat edin ( phpinfo()"Sunucu API" alanında "CGI / FastCGI" gösteriliyorsa bu durum söz konusudur ). phpinfo()etkin modülleri listelemeyecek. Bu durumda, PHP CGI'da mod_rewrite'ın nasıl kontrol edileceğine bakın .
Rory O'Kane

67

Bir sanal ana makine yapılandırma dosyası kullanıyorsanız, söz konusu sanal ana makinenin aşağıdaki AllowOverride Allgibi bir yönergeye sahip olduğundan emin olun :

<VirtualHost *:80>
        ...
    <Directory "directory/of/your/.htaccess">
        AllowOverride All
    </Directory>
</VirtualHost>

Temel olarak bu, tüm .htaccess direktiflerinin işlenmesine izin verir.


3
Teşekkürler. Sana bir Budweiser borçluyum. <3
Nishant Ghodke

ne anlama gelir ...de <Directory ...>? Oraya ne koymalıyım? htaccess'in olduğu dizin?
João Pimentel Ferreira

evet gerçekten, ... alıntılar arasında "..." .htaccess'in olduğu
João Pimentel Ferreira

Vardı. Conf dosyasını sunucudan kopyaladım ve ServerNamedeğiştirirken dizin adını değiştirmedim, bundan sonra apache yeniden başlatıldı.
D. Dan

1
Richard Eğer bu cevap sizin için işe yaradıysa ve probleminizi çözdüyse, doğru olarak işaretlemeli ve hakkını @Jahmic'e vermelisiniz.
Sinthia V

18

Apache_get_modules () tanınmazsa veya phpinfo () 'da bu modül hakkında bilgi yoksa; htaccess dosyanıza bu satırları ekleyerek modu yeniden yazmayı test etmeyi deneyin:

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

Ve mod_rewrite.php:

<?php echo "Mod_rewrite is activated!"; ?>

15

konsol:

<VirtualHost *:80>
        ...
    <Directory ...>
        AllowOverride All
    </Directory>
</VirtualHost>

sudo a2enmod rewrite
sudo service apache2 restart

Bunu çözmek için çok denedim ve sonra bunu denediğimde benim için çalışıyor. Şimdi son apache ve ubuntu'ya sahibim.
Fernando Sanchiz

15

Eğer

in_array('mod_rewrite', apache_get_modules())

döner truesonra mod-yeniden yazma etkinleştirilir.


Yeniden yazma modülünün PHP kodları aracılığıyla etkinleştirilip etkinleştirilmediğini kontrol etmek için mükemmel tek satırlık çözüm.
Shakeel Ahmed

12

PHP'nin perdefined apache_get_modules()işlevi, etkinleştirilmiş modüllerin bir listesini döndürür. mod_rewriteEtkin olup olmadığını kontrol etmek için aşağıdaki komut dosyasını sunucunuzda çalıştırabilirsiniz:

<?php
print_r(apache_get_modules());
?>

Yukarıdaki örnek başarısız olursa, .htaccessdosyanızı kullanarak mod yeniden yazmayı doğrulayabilirsiniz .

htaccessBelge kök dizininde bir dosya oluşturun ve aşağıdaki yeniden yazma kuralını ekleyin:

RewriteEngine on

RewriteRule ^helloWorld/?$ /index.php [NC,L]

Şimdi http://example.com/HelloWorld adresini ziyaret edin , dahili olarak sitenizin /index.php sayfasına yönlendirileceksiniz . Aksi takdirde, mod yeniden yazma devre dışı bırakılırsa, 500 Internel sunucu hatası alırsınız.

Bu yardımcı olur umarım.


7.2 kullanıyorum, apache_get_modules undefined oldu. Düzenlemeden sonra apache2'yi yeniden başlatmam gerekir .htaccessmi?
Adi Prasetyo

1
Hayır, htaccess kullanırken sunucunuzu yeniden başlatmanıza gerek yoktur.
Amit Verma

12

bunu terminalde yapabilirsiniz:

apachectl -M
apache2ctl -M

2daygeek alınan


Debian 9'da çalışır ancak root olarak oturum açmanız veya kullanmanız gerekirsudo
androsfat

11

Bu CentOS üzerinde çalışır:

$ sudo httpd -M |grep rewrite_module

Çıktı gerekir rewrite_module (shared)


Ssh erişiminiz olduğunu varsayarak, bunu CentOS'ta yapmanın en iyi yolu budur. Teşekkürler @radtek!
John T.

10

Bu kod .htaccess dosyanızdaysa (mod_rewrite.c kontrolü olmadan)

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

ve 500 sunucu hatası alarak sitenizdeki herhangi bir sayfayı ziyaret edebilirsiniz. Mod yeniden yazmanın açık olduğunu söylemenin güvenli olduğunu düşünüyorum.


3
Yani sitedeki bazı sayfalara 500 hatası olmadan erişebiliyor musunuz? Bu genellikle .htaccess dosyası okunuyorsa, mod_rewrite'ın açılması gerektiği anlamına gelir. Ancak .htaccess okunmuyor olabilir ... .htaccess dosyanızın en üstüne bazı anlamsız karakterler yazmayı deneyin, bu, Apache dosyayı gerçekten okuyorsa bağlantının 500 sunucu hatasıyla kesilmesine neden olacaktır. Okunuyorsa, çalışması gerektiğini düşündüğünüz ancak çalışmadığını düşündüğünüz bir URL örneği verebilir misiniz?
Clive

sorun şu ki, apache sunucusu değil, ışık hızı. Asla 500 hatası almıyorum, tek aldığım 404 hatası. Bu yüzden .htaccess'in etkinleştirilmediğinden şüphe ediyorum.
knightrider

Büyük olasılıkla evet, saçma karakterleri .htaccess'e koymayı deneyeceğim ve doğrudan yeniden yazılmamış bir sayfaya (örneğin, index.php) gittiğinizde 500 hatasını alıp almadığınıza bakacağım. Değilse, .htaccess'in Lightspeed ile nasıl etkinleştirileceğini soran yeni bir soru göndermeye değer olabilir
Clive

5

Php işlevini kullanabilirsiniz

      apache_get_modules

ve mod_rewrite'ı kontrol edin

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>

http://in2.php.net/apache_get_modules


2
apache_get_modules (), yalnızca PHP bir Apache modülü olarak çalışıyorsa çalışır. OP, PHP'nin Lightspeed üzerinde çalıştığını belirtir.
MrWhite

5

Linux sistemindeyseniz, aşağıdaki klasörde apache2 için tüm etkinleştirme modüllerini (benim durumumda) kontrol edebilirsiniz: / etc / apache2 / mods-available

cd /etc/apache2/mods-available

yazmak için: ll -a
php için mevcut modülleri kontrol etmek istiyorsanız (bu durumda php 7) klasörü /etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

yazmak: ll -a


4

sadece yeni bir sayfa oluşturun ve bu kodu ekleyin

 <?php
 if(!function_exists('apache_get_modules') ){ phpinfo(); exit; }
 $res = 'Module Unavailable';
 if(in_array('mod_rewrite',apache_get_modules())) 
 $res = 'Module Available';
?>
<html>
<head>
<title>A mod_rewrite availability check !</title></head>
<body>
<p><?php echo apache_get_version(),"</p><p>mod_rewrite $res"; ?></p>
</body>
</html>

ve bu sayfayı çalıştırın ve sonra modülün Kullanılabilir olup olmadığını bilip bulamayacağınızı bulun, ardından barındırma hizmetinize sorabilirsiniz veya yerel makinede etkinleştirmek istiyorsanız, wamp apache'de yeniden yazma modülünü etkinleştirmek için bu youtube adım adım öğreticiyi kontrol edin https://youtu.be/xIspOX9FuVU?t=1m43s Wamp sunucusu simgesi -> Apache -> Apache Modülleri ve yeniden yazma modülü seçeneğini kontrol edin


2

Bu sorunun eski olduğunu biliyorum, ancak Apache yapılandırma dosyanızı AllowOverride Allşuradan olarak düzenleyebiliyorsanız :AllowOverride None

<Directory "${SRVROOT}/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

Değiştirilmesi gereken dosyanın tam adını ve mümkünse konumunu söylemek iyi bir fikirdir. Yeni gelenler için faydalı olacaktır. Teşekkürler
MindRoasterMir

Ayrıca, değişikliklerin ancak apache'nizi yeniden belirledikten sonra etkili olacağı unutulmamalıdır. teşekkürler
MindRoasterMir

1

Yazarak dosyanın orada olup olmadığını kontrol etmeniz yeterlidir.

cat /etc/apache2/mods-available/rewrite.load

Sonuç satırı, ile başlayarak yorumlanamaz. #


1

Bu kod benim için çalıştı:

if (strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false) echo "mod_rewrite enabled";
else echo "mod_rewrite disabled";

0

Tam problemi yaşıyordum, özel yapıya tıklayarak çözdüm, sonra ekledim /index.php/%postname%/ve çalışıyor

Umarım bu, yanlış olanın ne olduğunu bulmakta yaşadığım stresten kurtulur.

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.