Ik heb een nieuwe installatie van Apache 2.2 op mijn Vista-machine, alles werkt prima, behalve mod rewrite.
Ik heb geen commentaar meer gegeven
LoadModule rewrite_module modules/mod_rewrite.s
maar geen van mijn herschrijfregels werkt, zelfs niet simpele zoals
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
Alle regels die ik gebruik werken op mijn hosting, dus ze zouden in orde moeten zijn, dus mijn vraag is, is er iets verborgen in de apache-configuratie dat het herschrijven van mods zou kunnen blokkeren?
Antwoord 1, autoriteit 100%
Om mod_rewrite
te gebruiken, kun je het volgende commando in de terminal typen:
sudo a2enmod rewrite
Herstart apache2 na
sudo /etc/init.d/apache2 restart
of
sudo service apache2 restart
of volgens de nieuwe uniforme systeembesturingsmanier
sudo systemctl restart apache2
Vervolgens kun je, als je wilt, het volgende .htaccess
-bestand gebruiken.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Het bovenstaande .htaccess
-bestand (indien geplaatst in uw DocumentRoot
) zal al het verkeer omleiden naar een index.php
-bestand in de DocumentRoot
tenzij het bestand bestaat.
Dus, laten we zeggen dat je de volgende directorystructuur hebt en httpdocs is de DocumentRoot
httpdocs/
.htaccess
index.php
images/
hello.png
js/
jquery.js
css/
style.css
includes/
app/
app.php
Elk bestand dat in httpdocs bestaat, wordt aan de aanvrager aangeboden met behulp van de hierboven getoonde .htaccess
, maar al het andere wordt doorgestuurd naar httpdocs/index.php
. Uw applicatiebestanden in includes/app
zijn niet toegankelijk.
Antwoord 2, autoriteit 22%
Voor mijn situatie had ik
RewriteEngine On
in mijn .htaccess
, samen met de module die werd geladen, en het werkte niet.
De oplossing voor mijn probleem was om mijn vhost-item te bewerken om
AllowOverride all
in het gedeelte <Directory>
voor de betreffende site.
Antwoord 3, autoriteit 8%
Probeer instelling: AllowOverride All
.
Het tweede meest voorkomende probleem is dat mod rewrite niet is ingeschakeld: a2enmod rewrite
en start vervolgens apache opnieuw.
Antwoord 4, autoriteit 8%
Als geen van bovenstaande werkt, probeer dan /etc/apache2/sites-enabled/000-default te bewerken
bijna bovenaan vind je
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Verander de AllowOverride None
in AllowOverride All
dit werkte voor mij
Antwoord 5, autoriteit 5%
In Ubuntu:
Uitvoeren:
a2enmod rewrite
en dan:
service apache2 restart
mod_rewrite
is nu ingeschakeld!
Antwoord 6, autoriteit 4%
Nieuwe apache-versie is op de een of andere manier gewijzigd. Als uw apache-versie 2.4 is, moet u naar /etc/apache2/
gaan. Er zal een bestand zijn met de naam apache2.conf
. Je moet die bewerken (je zou root-rechten moeten hebben). Wijzig directorytekst op deze manier
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Herstart nu apache.
service apache2 reload
Hoop dat het werkt.
Antwoord 7, autoriteit 3%
Er zijn veel manieren waarop u dit probleem kunt oplossen, als u de oorzaak van het probleem kent.
Probleem 1
Ten eerste kan het een probleem zijn dat uw apache de module mod_rewrite.c niet heeft geïnstalleerd of ingeschakeld.
Om deze reden zou je het als volgt moeten inschakelen
-
Open je console en typ erin, dit:
sudo a2enmod rewrite
-
Herstart je apache-server.
service apache2 restart
Probleem 2
-
Als het niet werkt, kan het ook zijn dat u, als aanvulling op het bovenstaande, de override-regel van het apache-conf-bestand (ofwel apache2.conf, http.conf of 000-default-bestand) moet wijzigen.
-
Zoek “Directory /var/www/”
-
Verander “Geen overschrijven” in “Alles overschrijven”
Probleem 3
Als je een foutmelding krijgt waarin staat dat de herschrijfmodule niet gevonden is, dan is dat waarschijnlijk je userdir-module
is niet ingeschakeld. Om deze reden moet u het inschakelen.
-
Typ dit in de console:
sudo a2enmod userdir
-
Probeer vervolgens de herschrijfmodule in te schakelen als deze nog niet is ingeschakeld (zoals hierboven vermeld).
Als u hier meer over wilt lezen, kunt u deze site bezoeken: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
Antwoord 8, autoriteit 3%
Open terminal en typ a2enmod rewrite
, het zal je mod_rewrite
module voor Apache inschakelen.
Ga dan naar /etc/apache2/sites-available
en bewerk het standaardbestand. (Hiervoor moet u schrijfrechten hebben voor dit bestand en de map die beschikbaar is voor sites.)
Vervang hieronder door bestaande regels 4 tot 14
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>
Herstart nu uw apache door /etc/init.d/apache2 restart
of service apache2 restart
Doe opnieuw een schone URL-test en deze keer zal deze worden doorstaan.
Antwoord 9
<bewerken>
Ik merkte net dat je mod_rewrite.s zei in plaats van mod_rewrite.so – ik hoop dat dit een typefout is in je vraag en niet in het httpd.conf-bestand! 🙂
</edit>
Ik ben meer gewend om Apache op Linux te gebruiken, maar ik moest dit onlangs doen.
Kijk eerst eens in uw Apache-installatiemap. (Ik neem aan dat je het hier in “C:\Program Files” hebt geïnstalleerd)
Kijk in de map: “C:\Program Files\Apache Software Foundation\Apache2.2\modules” en zorg ervoor dat er een bestand met de naam mod_rewrite.so in staat. (Het zou moeten zijn, het wordt geleverd als onderdeel van de standaardinstallatie.
Open vervolgens “C:\Program Files\Apache Software Foundation\Apache2.2\conf” en open httpd.conf. Zorg ervoor dat de regel:
#LoadModule rewrite_module modules/mod_rewrite.so
heeft geen commentaar:
LoadModule rewrite_module modules/mod_rewrite.so
Als u de RewriteEngine standaard wilt inschakelen, wilt u misschien iets toevoegen als
<IfModule mod_rewrite>
RewriteEngine On
</IfModule>
aan het einde van je httpd.conf-bestand.
Als dit niet het geval is, zorg er dan voor dat u opgeeft
RewriteEngine On
ergens in uw .htaccess-bestand.
Antwoord 10
Ik heb dit net gedaan
sudo a2enmod rewrite
dan moet je de apache-service opnieuw opstarten door het volgende commando
sudo service apache2 restart
Antwoord 11
Oude thread, ik wil dat gewoon niet toestaan om AllowOverride op alles te zetten, maar gebruik een specifieke mod die je wilt gebruiken,
AllowOverride mod_rewrite mod_mime
En deze regel mag niet meer worden becommentarieerd
LoadModule rewrite_module modules/mod_rewrite.so
Referenties
- http:/ /www.eschrade.com/page/why-you-should-not-use-htaccess-allowoverride-all-in-production/
- https://httpd.apache.org/docs/2.4/misc/ security_tips.html
- https://httpd.apache.org/docs/2.4/rewrite/ vermijden.html
Antwoord 12
Gebruik onderstaande opdracht
sudo a2enmod rewrite
En de herstart apache via onderstaande opdracht
sudo service apache2 restart
Antwoord 13
Er is natuurlijk meer dan één manier om het te doen, maar ik zou willen voorstellen om de meer standaard te gebruiken:
ErrorDocument 404 /index.php?page=404
14
De eerste keer dat ik worstelde met Mod_rewrite-regels die mijn verkeer negeerde, leerde ik (frustrerend) dat ik ze in het verkeerde had geplaatst <VirtualHost>
, wat betekende dat mijn verkeer zou negeren Alle van hen, ongeacht hoe goed ze waren. Zorg ervoor dat dit niet met u gebeurt:
# Change the log location to suit your system.
RewriteLog /var/log/apache-rw.log
RewriteLogLevel 2
Deze parameters zullen activeren als u een sierlijke herstart van Apache uitvoert, zodat u ze kunt recyclen in en het mod_rewrite-gedrag nauwlettend volgen. Zodra uw probleem is opgelost, draait u het rewritelogleLevel terug en vier het.
In 100% van mijn ervaring heb ik ontdekt dat de rewritelog me heeft geholpen het probleem te ontdekken met mijn herschrijfregels. Ik kan dit niet genoeg aanbevelen. Veel succes in je Troubleshooting!
Ook, deze bladwijzer is uw beste vriend:
http://httpd.apache.org/docs/2.2/mod/mod_rewrite .html # rewritelog