2011-10-19 7 views
37

Zainstalowałem poprawiony_moduł i zmodyfikowałem php.ini na Apache.apache mod_rewrite nie działa lub nie jest włączony

Tworzę pliki rewrite.php i .htaccess, ale to nie działa.

Moje foldery systemu plików jak:

/var/www/html 
/var/www/html/test 
/var/www/html/test/.htaccess 
/var/www/html/test/rewrite.php 

zawartość /var/www/html/.htaccess jest:

$ cat /var/www/html/test/.htaccess 

RewriteEngine On 
RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L] 

/var/www/html/rewrite.php

$ cat /var/www/html/test/rewrite.php 

<html> 
<h2 align=center> 
<?php 
// mod_rewrite Test Page 
// Copyright 2006 Webune.com 
if($_GET['link']==1){echo"You are not using mod_rewrite";} 
elseif($_GET['link']==2){echo"Congratulations!! You are using Apache mod_rewrite";} 
else{echo"Linux Apache mod_rewrte Test Tutorial";} 
?> 
</h2> 
<hr> 
<head> 
<title>How To Test mod_rewrite in Apache Linux Server</title> 
</head> 
<body> 
<p align="center">by <a href="http://www.webune.com">Webune</a></p> 
<p><a href="rewrite.php?link=1">LINK1</a> = rewrite.php?link=1</p> 
<p><a href="link2.html">LINK2</a> = link2.html</p> 
<p>How this works: both links are for this same page, except they both are different. link one is without the mod_rewrite and link2 is using mod_rewrite. Link1 show the php file, with with mod_rewrite we are mascarading the php file into a html file. you can use whatever type of extension you want, you can change it to .htm or .shtml etc... all you have to do is to make sure you also chang it in the .htaccess file</p> 
<p>&lt;&lt; <a href="http://www.webune.com/forums/viewtopic-p-62.html">Go back to webune forums.</a></p> 
</body> 
</html> 

mod_rewrite.so jest zainstalowany.

Przepisano_moduł został załadowany.

$ cat /etc/httpd/conf/httpd.conf | grep mod_rewrite.so 
LoadModule rewrite_module modules/mod_rewrite.so 

AllowOverride ustawienie

$ cat /etc/httpd/conf/httpd.conf 
<Directory "/var/www/html"> 
    Options Indexes FollowSymLinks 

    AllowOverride None 

    Order allow,deny 
    Allow from all 
</Directory> 

Odpowiedz

5

Spróbuj

sudo a2enmod rewrite 

lub użyj poprawne polecenie restart apache

sudo /etc/init.d/apache2 restart 
+0

ale nie mam polecenie 'a2enmod'. ponieważ moja apahce to [mum instaluj apache] – easter1021

+0

Z jakiego systemu operacyjnego korzystasz? (CentOS, Ubuntu itp.) – ASHOK

+1

Mój OS to "AWS EC2 t1.micro". przepraszam, zajęty później. – easter1021

4

to działa.

moje rozwiązanie to:

1.Create test.conf do /etc/httpd/conf.d/test.conf

2.wrote niektóre rządy, jak:

<Directory "/var/www/html/test"> 
RewriteEngine On 
RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L] 
</Directory> 

3.restartuj swój serwer Apache.

4.Spróbuj ponownie.

+3

Dobrze, że znalazłeś rozwiązanie, ale nie kończ swojej odpowiedzi innym pytaniem. – slugster

+0

Należy zauważyć, że jeśli umieści się te dyrektywy w pliku httpd.conf zamiast .htaccess, wymagany jest znacznik Directory. – Aaron

0

Aby uzyskać mod_rewrite do pracy dla mnie w Apache 2.4, musiałem dodać wiersz "Wymagaj wszystkich przyznanych" poniżej.

<Directory /var/www> 
    # Required if running apache > 2.4 
    Require all granted 

    RewriteEngine on 
    RewriteRule ^cachebust-([a-z0-9]+)\/(.*) /$2 [L] 
</Directory> 

podobno istnieje podobny wymóg dla Apache 2.2, a także, jeśli używasz, że:

<Directory /var/www> 
    # Required if running apache 2.2 
    Order allow,deny 
    Allow from all 

    RewriteEngine on 
    RewriteRule ^cachebust-([a-z0-9]+)\/(.*) /$2 [L] 
</Directory> 

pamiętać, że dyrektywa ErrorDocument 404 może czasem zastąpić te rzeczy, tak więc jeśli to nie działa spróbuj skomentować swoją dyrektywę ErrorDocument i sprawdź, czy działa. Powyższy przykład może być użyty do zapewnienia, że ​​witryna nie jest obsługiwana z pamięci podręcznej przez umieszczenie w ścieżce podfolderów, chociaż pliki znajdują się w katalogu głównym serwera.

0

Na centOS7 Zmieniłem plik /etc/httpd/conf/httpd.conf

z AllowOverride Żaden do AllowOverride All

Powiązane problemy