# Mod_Rewrite lässt sich nicht aktivieren



## Moritz123 (7. August 2012)

Hallo zusammen,

ich komme hier einfach nicht weiter mit meiner Apache-Installation.
Ich habe einen selbstkompilierten httpd mit folgender config.nice:


> "./configure" \
> "--prefix=/usr/local/apache" \
> "--enable-shared=max" \
> "--enable-rewrite" \
> "--enable-module=so" \


Dort ist eindeutig vermerkt, dass er das mod_rewrite direkt mit aktivieren soll, ein 
httpd -l listet auch das Modul:


> Compiled in modules:
> core.c
> mod_access.c
> mod_auth.c
> ...



Ich habe also testweise folgende Rule in meinem Docroot angelegt:

```
RewriteEngine On
RewriteRule ^(.*)\.html$ $1.php [L]
```
und eine index.php angelegt.
Bei Aufruf von http://localhost/index.html erhalte ich einen Error 500 und folgende Meldung im error_log:


> Tue Aug 07 13:03:26 2012] [alert] [client 10.0.2.2] /home/user/public_html/.htaccess: Invalid command 'RewriteEngine', perhaps mis-spelled or defined by a module not included in the server configuration



Muss ich das mod_rewrite noch irgendwie aktivieren? Ich habe schon alles versucht (auch das Komplilieren des mod_rewrites als shared, was dann nur eine mod_rewrite.a bzw. mod_rewrite.la im modules-Verzeichnis erzeugt hat).

Vielen Dank!


----------



## erik s. (8. August 2012)

Im Manual meines Apachen finde ich das:

```
-l     Output  a  list  of modules compiled into the server. This will not list dynamically loaded modules included using
       the LoadModule directive.
```


```
$ sudo a2enmod rewrite
$ sudo service apache2 restart
```


----------



## Moritz123 (8. August 2012)

Hallo Erik,

vielen Dank für deine Antwort. Ich habe rewrite allerdings nicht als dynamische library sondern direkt mit einkompiliert (so wie beispsw. core.c). 
Um a2enmod zu nutzen, muss das Shared Object des Moduls bereits fertig kompiliert vorliegen. Genau das tut es in meinem Fall aber nicht, da der make-Prozess lediglich eine mod_rewrite.a bzw. eine mod_rewrite.la Datei erzeugt, statt der gewünschten mod_rewrite.so.


----------



## threadi (8. August 2012)

Müsste


```
enable-rewrite
```

nicht noch static als Wert haben?

```
enable-rewrite=static
```

Siehe:
http://httpd.apache.org/docs/2.2/programs/configure.html


----------



## Moritz123 (8. August 2012)

Mhh, also in der von dir erwähnten Doku steht auch --enable-rewrite. Dies habe ich auch so an diversen Stellen im Internet gesehen. Nichtsdestotrotz werde ich das morgen nochmals so testen.

Vielen Dank erstmal - ich werde berichten, ob es klappt 

NACHTRAG: Ich verwende übrigens (bewusst) Apache httpd 2.0.


----------



## threadi (9. August 2012)

Ich meinte das hier:


```
--enable-rewrite=static
```

denn



> --enable-MODULE=static
> By default enabled modules are linked statically. You can force this explicitly.



http://httpd.apache.org/docs/2.0/programs/configure.html

Siehe auch:
http://marc.info/?l=apache-httpd-users&m=115167353018937


----------



## deepthroat (9. August 2012)

Hi.





threadi hat gesagt.:


> Ich meinte das hier:
> 
> 
> ```
> ...


Es scheint du hast dann aber die Hilfe nicht richtig verstanden. Static ist sowieso der Standard, man kann auch noch *=static* angeben, aber das ändert ja gar nichts am Ergebnis.

@moritz123:

Wenn du mod_rewrite statisch einkompiliert hast (und so sieht es ja aus) ist ein a2enmod unnötig.



> Ich habe schon alles versucht (auch das Komplilieren des mod_rewrites als shared, was dann nur eine mod_rewrite.a bzw. mod_rewrite.la im modules-Verzeichnis erzeugt hat).


Eine .a ist eine statische Bibliothek. Du mußt eine .so erstellen. Was hast du denn genau gemacht?

Gruß


----------



## Moritz123 (9. August 2012)

Hallo,

vielen Dank euch nochmals für die Antworten.
Um die mod_rewrite als shared object zu kompilieren, habe ich folgende configure-Options verwendet:


> "./configure" \
> "--prefix=/usr/local/apache" \
> "--enable-shared=most" \
> "--enable-rewrite=shared" \
> "--enable-module=so" \



"make install" gibt dann u.A. folgendes aus: 


> /usr/local/src/httpd-2.0.63/srclib/apr/libtool --silent --mode=install cp mod_rewrite.la /usr/local/apache/modules/
> Warning!  dlname not found in /usr/local/apache/modules/mod_rewrite.la.
> Assuming installing a .so rather than a libtool archive.


Unter /usr/local/apache/modules finden sich dann die besagte .a bzw. .la-Datei.


----------



## deepthroat (9. August 2012)

Moritz123 hat gesagt.:


> Unter /usr/local/apache/modules finden sich dann die besagte .a bzw. .la-Datei.


Also irgendwas hast du falsch gemacht.

Welche Version hast du denn genau?

Test mit Apache 2.0.64:

```
./configure --enable-rewrite=shared && make && make install
```
Resultat:

```
$ ls prefix/modules
httpd.exp  mod_rewrite.so
```
Was soll denn die Option "--enable-module=so" bedeuten? Meintest du evtl. "--enable-so"?

Und statt --enable-shared meintest du --enable-mods-shared?

Ist denn configure wirklich durchgelaufen?

Gruß


----------



## Moritz123 (9. August 2012)

Also configure ist ohne Probleme durchgelaufen - Version ist 2.0.63.

Ich bin im wesentlichen dieser Anleitung gefolgt: http://www.lamphowto.com/ - dort sind auch die ensprechenden configure-Flags verzeichnet. Ich werde es aber nochmals mit folgender Konfiguration versuchen:


> "./configure" \
> "--prefix=/usr/local/apache" \
> "--enable-mods-shared=most" \
> "--enable-rewrite=shared" \
> "--enable-so" \


Ich melde mich gleich nochmals.

Vielen Dank!


----------



## deepthroat (9. August 2012)

Moritz123 hat gesagt.:


> Also configure ist ohne Probleme durchgelaufen - Version ist 2.0.63.


Du solltest wirklich besser die neueste Version verwenden =>


			
				Apache hat gesagt.:
			
		

> Apache 2.0.64 is the legacy stable version of the 2.0 series, and is recommended over any previous 2.0 release. *This release fixes a few potential security vulnerabilites.*


Gruß


----------



## Moritz123 (9. August 2012)

Hallo nochmal,

jetzt hat es mit den obigen configure-Optionen geklappt. Vielen Dank für den Hinweis mit dem --enable-so - ich denke mal es lag wohl daran.

Vielen Dank!


----------



## Moritz123 (9. August 2012)

Ok, ganz vorbei ist es leider doch noch nicht: Ich bekomme folgende Fehlermeldung, nachdem ich ein 


> LoadModule mod_rewrite        modules/mod_rewrite.so


der httpd.conf hinzugefügt habe:


> Syntax error on line 234 of /usr/local/apache/conf/httpd.conf:
> Can't locate API module structure `mod_rewrite' in file /usr/local/apache/modules/mod_rewrite.so: /usr/local/apache/modules/mod_rewrite.so: undefined symbol: mod_rewrite


Any ideas?


----------



## deepthroat (9. August 2012)

Probier's mal so:

```
LoadModule rewrite_module modules/mod_rewrite.so
```
Gruß


----------



## Moritz123 (9. August 2012)

Ah - danke - nun funktionierts.

Allerdings lädt die Seite (ein Wordpress 3.4.1 Blog) extrem langsam und die CPU-Load geht durch die httpd-Prozesse extrem hoch (> 90 %), wobei die Seite weiß bleibt (für ca. 25 Sek).
Dieses Verhalten schein mir etwas seltsam - hast Du hier irgendwelche Ideen, woran es liegen könnte?


----------



## deepthroat (9. August 2012)

Moritz123 hat gesagt.:


> Ah - danke - nun funktionierts.
> 
> Allerdings lädt die Seite (ein Wordpress 3.4.1 Blog) extrem langsam und die CPU-Load geht durch die httpd-Prozesse extrem hoch (> 90 %), wobei die Seite weiß bleibt (für ca. 25 Sek).
> Dieses Verhalten schein mir etwas seltsam - hast Du hier irgendwelche Ideen, woran es liegen könnte?


Nein, nicht wirklich. Hast du denn mod_php installiert?

Gruß


----------



## Moritz123 (9. August 2012)

Ja, das auf jeden Fall. Die Seite wird nach ca. 25 Sekunden ja auch so angezeigt, wie es sein soll.
Ich habe auch ein Testscript geschrieben, dass Daten aus der DB holt und ausgibt - das lädt schnell und 
ohne diese ungewöhnlich hohe CPU Last. Ich denke, dass es irgendetwas mit Wordpress zu tun hat. Es muss aber auch etwas mit meiner lokalen Installation zu tun haben, da die Seite in der Produktionsumgebung (daher auch Apache 2.0.63) schnell lädt. Meine lokalen Einstellungen entsprechen für PHP und den Apache genau denen des Produktionssystems.


----------

