Impossible de configurer mod_rewrite avec XAMPP


1

J'essaie d'activer mod_rewrite sur une installation XAMPP 5.6.3. J'ai suivi ces guides:

... et un groupe d'autres j'ai réussi à google up. Malheureusement, en vain.

J'ai un projet qui a été développé sous Linux, fonctionne parfaitement là-bas, avec le .htaccessfichier à l'intérieur:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

J'ai essayé:

  1. S'assurer que la ligne LoadModule rewrite_module modules/mod_rewrite.son'est pas commentée httpd.conf.
  2. Remplacer AllowOverride nonepar AllowOverride alldans httpd.conf(2 ou 3 occurrences).
  3. Ajout de AllowOverride alldirectives dans toutes les <Directory>sections que j’ai ajoutées httpd-vhosts.confalors que ce qui précède ne fonctionnait pas, juste au cas où.
  4. Redémarrage après les modifications n ° 2 et n ° 3.

J'essaie d'accéder aux URL du répertoire avec le fichier .htaccess, mais aucune d'entre elles n'est probablement réécrite et donne 404. L'accès au fichier vers lequel elles doivent être réécrites est possible et ne génère aucune erreur. L'accès à .htaccesslui - même donne 403.

J'ai aussi essayé d'ajouter:

RewriteLog "C:/XAMPP/apache/logs/rewrite.log"
RewriteLogLevel 3

... à la fois pour httpd.confet httpd-vhosts.confparfois sans RewriteLog, mais lorsque je le fais, Apache refuse de démarrer - parfois, il génère des messages d'erreur génériques dans la console XAMPP, parfois, il se bloque. Il n'écrit rien du error.logtout. Donc, pas de mod_rewritesortie de débogage. phpinfo()montre cependant que les modules chargés sont:

noyau mod_win32 mpm_winnt http_core mod_so mod_access_compat mod_actions mod_alias mod_allowmethods mod_asis mod_auth_basic mod_authn_core mod_authn_file mod_authz_core mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dav_lock mod_dir mod_env mod_headers mod_include mod_info mod_isapi mod_log_config mod_cache_disk mod_mime mod_negotiation mod_proxy mod_proxy_ajp mod_rewrite mod_setenvif mod_socache_shmcb mod_ssl mod_status mod_version mod_php5

Donc, il devrait être plus ou moins en état de fonctionnement.

Ça me rend fou. S'il vous plaît aider.

Vous trouverez ci-dessous le contenu complet de tout ce qui semble utile à distance:

httpd.conf:

ServerRoot "C:/XAMPP/apache"


Listen 80

LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dav_lock_module modules/mod_dav_lock.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule include_module modules/mod_include.so
LoadModule info_module modules/mod_info.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule cache_disk_module modules/mod_cache_disk.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule status_module modules/mod_status.so
LoadModule version_module modules/mod_version.so

<IfModule unixd_module>
User daemon
Group daemon

</IfModule>


ServerAdmin postmaster@localhost

ServerName localhost:80

<Directory />
    AllowOverride all
    Require all denied
</Directory>


DocumentRoot "C:/XAMPP/htdocs"
<Directory "C:/XAMPP/htdocs">
    Options Indexes FollowSymLinks Includes ExecCGI

    AllowOverride All

    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.php index.pl index.cgi index.asp index.shtml index.html index.htm \
                   default.php default.pl default.cgi default.asp default.shtml default.html default.htm \
                   home.php home.pl home.cgi home.asp home.shtml home.html home.htm
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error.log"

LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>


    CustomLog "logs/access.log" combined
</IfModule>

<IfModule alias_module>


    ScriptAlias /cgi-bin/ "C:/XAMPP/cgi-bin/"

</IfModule>

<IfModule cgid_module>
</IfModule>

<Directory "C:/XAMPP/cgi-bin">
    AllowOverride All
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig conf/mime.types

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

    AddHandler cgi-script .cgi .pl .asp


    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

<IfModule mime_magic_module>
    MIMEMagicFile "conf/magic"
</IfModule>






Include conf/extra/httpd-mpm.conf

Include conf/extra/httpd-multilang-errordoc.conf

Include conf/extra/httpd-autoindex.conf

Include conf/extra/httpd-languages.conf

Include conf/extra/httpd-userdir.conf

Include conf/extra/httpd-info.conf

Include conf/extra/httpd-vhosts.conf



Include "conf/extra/httpd-proxy.conf"
Include "conf/extra/httpd-default.conf"
Include "conf/extra/httpd-xampp.conf"

<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>

Include conf/extra/httpd-ssl.conf
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>


AcceptFilter http none

<IfModule mod_proxy.c>
<IfModule mod_proxy_ajp.c>
Include "conf/extra/httpd-ajp.conf"
</IfModule>
</IfModule>

httpd-vhosts.conf:

<VirtualHost *:80>
    ServerAdmin septagramm@gmail.com
    DocumentRoot "S:/efit_rails4/public"
    Alias /remote-control "S:/ssm-misc/remote-control"
    <Directory "S:/efit_rails4/public">
        Require all granted
        AllowOverride All
    </Directory>
    <Directory "S:/ssm-misc/remote-control">
        Require all granted
        AllowOverride All
    </Directory>
    ServerName SSM
</VirtualHost>

bas de error.log:

[Fri Nov 28 05:43:56.875099 2014] [mpm_winnt:notice] [pid 9780:tid 380] AH00456: Apache Lounge VC11 Server built: Jul 17 2014 11:50:08
[Fri Nov 28 05:43:56.875099 2014] [core:notice] [pid 9780:tid 380] AH00094: Command line: 'c:\\xampp\\apache\\bin\\httpd.exe -d C:/XAMPP/apache'
[Fri Nov 28 05:43:56.876100 2014] [mpm_winnt:notice] [pid 9780:tid 380] AH00418: Parent: Created child process 8276
[Fri Nov 28 05:43:57.155297 2014] [ssl:warn] [pid 8276:tid 384] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Fri Nov 28 05:43:57.255380 2014] [ssl:warn] [pid 8276:tid 384] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Fri Nov 28 05:43:57.280385 2014] [mpm_winnt:notice] [pid 8276:tid 384] AH00354: Child: Starting 150 worker threads.
[Fri Nov 28 05:44:18.865136 2014] [authz_core:error] [pid 8276:tid 1728] [client 127.0.0.1:63898] AH01630: client denied by server configuration: S:/ssm-misc/remote-control/api/.htaccess

Mise à jour

Après un peu de persuasion (et l'aide de @ AD7six ), j'ai réussi à faire fonctionner la sortie de débogage. Il semble y avoir un nouveau moyen de configurer cela:

RewriteBase /remote-control/api/

Le mod de réécriture me semble bizarre, apparemment en train de réécrire correctement l'URL, puis de servir rapidement 404. De plus, j'ai essayé d'expérimenter et découvert que, si j'ajoutais une base de réécriture explicite égale au répertoire actuel, par exemple:

RewriteBase /remote-control/api/

Le type de réécriture fonctionne - je suis index.php, mais j'ai d'autres erreurs, je ne peux donc pas tout à fait confirmer si cela fonctionne vraiment . Cependant, je ne suis pas entièrement satisfait de cette solution. En outre, dans ce cas, la sortie de débogage est un peu plus longue, comme si elle effectuait une autre passe ou quelque chose d'autre. Et à la fin, il en résulte un nom de fichier identique, mais sans 404:

[Thu Dec 04 00:37:31.417478 2014] [rewrite:trace3] [pid 5636:tid 1728] mod_rewrite.c(475): [client ::1:58668] ::1 - - [localhost/sid#f51730][rid#88d4118/initial] [perdir S:/ssm-misc/remote-control/api/] strip per-dir prefix: S:/ssm-misc/remote-control/api/session -> session
[Thu Dec 04 00:37:31.417478 2014] [rewrite:trace3] [pid 5636:tid 1728] mod_rewrite.c(475): [client ::1:58668] ::1 - - [localhost/sid#f51730][rid#88d4118/initial] [perdir S:/ssm-misc/remote-control/api/] applying pattern '^' to uri 'session'
[Thu Dec 04 00:37:31.417478 2014] [rewrite:trace2] [pid 5636:tid 1728] mod_rewrite.c(475): [client ::1:58668] ::1 - - [localhost/sid#f51730][rid#88d4118/initial] [perdir S:/ssm-misc/remote-control/api/] rewrite 'session' -> 'index.php'
[Thu Dec 04 00:37:31.417478 2014] [rewrite:trace3] [pid 5636:tid 1728] mod_rewrite.c(475): [client ::1:58668] ::1 - - [localhost/sid#f51730][rid#88d4118/initial] [perdir S:/ssm-misc/remote-control/api/] add per-dir prefix: index.php -> S:/ssm-misc/remote-control/api/index.php
[Thu Dec 04 00:37:31.417478 2014] [rewrite:trace2] [pid 5636:tid 1728] mod_rewrite.c(475): [client ::1:58668] ::1 - - [localhost/sid#f51730][rid#88d4118/initial] [perdir S:/ssm-misc/remote-control/api/] trying to replace prefix S:/ssm-misc/remote-control/api/ with /remote-control/api/
[Thu Dec 04 00:37:31.417478 2014] [rewrite:trace1] [pid 5636:tid 1728] mod_rewrite.c(475): [client ::1:58668] ::1 - - [localhost/sid#f51730][rid#88d4118/initial] [perdir S:/ssm-misc/remote-control/api/] internal redirect with /remote-control/api/index.php [INTERNAL REDIRECT]
[Thu Dec 04 00:37:31.417478 2014] [rewrite:trace3] [pid 5636:tid 1728] mod_rewrite.c(475): [client ::1:58668] ::1 - - [localhost/sid#f51730][rid#88d7bb8/initial/redir#1] [perdir S:/ssm-misc/remote-control/api/] strip per-dir prefix: S:/ssm-misc/remote-control/api/index.php -> index.php
[Thu Dec 04 00:37:31.417478 2014] [rewrite:trace3] [pid 5636:tid 1728] mod_rewrite.c(475): [client ::1:58668] ::1 - - [localhost/sid#f51730][rid#88d7bb8/initial/redir#1] [perdir S:/ssm-misc/remote-control/api/] applying pattern '^' to uri 'index.php'
[Thu Dec 04 00:37:31.418478 2014] [rewrite:trace1] [pid 5636:tid 1728] mod_rewrite.c(475): [client ::1:58668] ::1 - - [localhost/sid#f51730][rid#88d7bb8/initial/redir#1] [perdir S:/ssm-misc/remote-control/api/] pass through S:/ssm-misc/remote-control/api/index.php

Que peut-il se passer ici?


1
Êtes-vous sûr de ne pas utiliser Apache 2.4? RewriteLog a été remplacé par LogLevel xxx rewrite: yyy - ce qui rendrait la configuration invalide et Apache refuserait de démarrer. Vous trouverez plus facile de supprimer de la config tout ce qui est sans rapport avec la question (bruit particulièrement commenté, mais je ne parle pas seulement de la question - je veux dire sur votre machine de développement) afin de se concentrer sur le problème. Je ne vois pas en quoi un problème de configuration (xampp) est pertinent pour serverfault - cette question est plus appropriée pour le dépassement de capacité de la pile.

@ AD7six, vous aviez raison, et cela a permis d'obtenir une sortie de débogage. Je vais mettre à jour la question dès que possible. En ce qui concerne le bruit de configuration, je vais supprimer les parties commentées aujourd’hui, je suis désolé d’avoir déchargé tout cela sur la communauté ((Pour ce qui n’est pas connecté, je ne pourrai pas toujours dire ce qui est du bruit .
Septagram

Réponses:


0

Vous avez RewriteRuletort Ça devrait ressembler à ça:

  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ /index.php [L,QSA]

Ajustez le chemin de redirection en fonction, mais il vous fallait plus que le caractère ^.


Comme le groupe de capture n’est pas utilisé, il n’est absolument pas nécessaire de l’avoir. La règle de réécriture de la question correspond simplement à toutes les URL (comme celle de cette réponse, mais c'est parce que sa fonction n'est pas différente). Voici quelque chose comme référence . Notez également que l'indicateur QSA n'est pas nécessaire si aucun argument de requête n'est ajouté dans la règle de réécriture.

@ AD7six bien, évidemment, ce qu'il utilise ne fonctionne pas pour lui car il ne correspond pas, donc quelque chose ne va vraiment pas. Encore une fois, il s’agit d’ Apache sous Windows, alors qui sait de quel type de configuration il s’agit?
Nathan C

Ne fonctionne pas, désolé (
Septagram
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.