Bonjour,
Je travaille actuellement pour un site d'e-commerce. Le site est en aspx (.NET) sur un serveur IIS 6 (Windows server 2003). Afin d'améliorer le référencement, nous avons mis en place un système d'URL rewriting avec le plug-in Helicon Isapi Rewrite 3.
Quand un utilisateur tape une adresse qui n'existe pas, IIS est paramétré pour rediriger vers une page d'erreur 404. Le client voudrait que l'adresse reste la même mais que l'intérieur de la page soit justement la page d'erreur 404. Pour ce faire, je pensais créé une règle d'URL Rewriting comme cela:
Le principe étant, si le fichier demandé n'existe pas, on redirige vers "pagenotfound.aspx". Cette règle a été placée à la toute fin du fichier "httpd.conf" donc après toutes les règles précédentes.
Le problème est le suivant:
l'utilisateur tape l'adresse "www.monsite.fr/elementdynamique/default.aspx", les différentes règles change cette adresse en "www.monsite.fr/default.aspx?param=elementdynamique". Cela fonctionne très bien mais la ligne RewriteCond à la fin du fichier test le fichier suivant: "D:\www\elementdynamique\default.aspx" alors que le fichier réel est "D:\www\default.aspx".
Autrement dit, l'URI est bien changé mais pas la référence au fichier physique. Du coup, la règle s'applique et l'utilisateur voit la page "pagenotfound.aspx" alors qu'il a dans l'adresse "www.monsite.fr/elementdynamique/default.aspx".
Je n'arrive pas à trouver une règle ou une variable serveur qui me permette de tester l'existence du fichier.
Avez-vous une suggestion ?
Merci d'avance,
*** Edit ***
PS: Voilà le log associé à ce que vient d'expliquer. Cela sera peut-être plus clair.
Nicolas
Je travaille actuellement pour un site d'e-commerce. Le site est en aspx (.NET) sur un serveur IIS 6 (Windows server 2003). Afin d'améliorer le référencement, nous avons mis en place un système d'URL rewriting avec le plug-in Helicon Isapi Rewrite 3.
Quand un utilisateur tape une adresse qui n'existe pas, IIS est paramétré pour rediriger vers une page d'erreur 404. Le client voudrait que l'adresse reste la même mais que l'intérieur de la page soit justement la page d'erreur 404. Pour ce faire, je pensais créé une règle d'URL Rewriting comme cela:
Code:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /pagenotfound.aspx [NC]
Le principe étant, si le fichier demandé n'existe pas, on redirige vers "pagenotfound.aspx". Cette règle a été placée à la toute fin du fichier "httpd.conf" donc après toutes les règles précédentes.
Le problème est le suivant:
l'utilisateur tape l'adresse "www.monsite.fr/elementdynamique/default.aspx", les différentes règles change cette adresse en "www.monsite.fr/default.aspx?param=elementdynamique". Cela fonctionne très bien mais la ligne RewriteCond à la fin du fichier test le fichier suivant: "D:\www\elementdynamique\default.aspx" alors que le fichier réel est "D:\www\default.aspx".
Autrement dit, l'URI est bien changé mais pas la référence au fichier physique. Du coup, la règle s'applique et l'utilisateur voit la page "pagenotfound.aspx" alors qu'il a dans l'adresse "www.monsite.fr/elementdynamique/default.aspx".
Je n'arrive pas à trouver une règle ou une variable serveur qui me permette de tester l'existence du fichier.
Avez-vous une suggestion ?
Merci d'avance,
*** Edit ***
PS: Voilà le log associé à ce que vient d'expliquer. Cela sera peut-être plus clair.
Code:
(3) applying pattern '^(.*)(?:/elementdynamique/)([\w/\-_\.]*)(?:\?)?(.*)?$' to uri '/elementdynamique/default.aspx'
(1) Rewrite URL to >> /default.aspx?param=elementdynamique&SkinID=2&
(2) rewrite '/elementdynamique/default.aspx' -> '/default.aspx?param=elementdynamique&SkinID=2&'
(4) RewriteCond: input='/elementdynamique/default.aspx' pattern='!-f' => matched
(1) Rewrite URL to >> /pagenotfound.aspx?param=elementdynamique&SkinID=2&
(2) rewrite '/default.aspx?param=elementdynamique&SkinID=2&' -> '/pagenotfound.aspx?param=elementdynamique&SkinID=2&'
(2) internal redirect with /pagenotfound.aspx?param=elementdynamique&SkinID=2& [INTERNAL REDIRECT]
Nicolas