2017-08-09 1 views
0

Je ne suis pas sûr que ce titre ait un sens, mais pour l'expliquer plus en détail, j'ai un site Web où chaque requête doit accéder à mon fichier appelé controller.php.IIS - Réécriture d'URL ne fonctionnant pas lorsque l'URL contient le mot 'data'

Cela fait quelque temps que je travaille sur ce site. Aujourd'hui, un nouveau répertoire contenant des fichiers PDF a été ajouté au site. Actuellement, il y a deux fichiers dans ce répertoire qui sont accessibles via des liens hypertexte.

Les deux chemins relatifs je suis accès sont: http://q360help.joehelp.com/Docs/Document_Grid_Filters.pdf
qui redirige correctement:
http://q360help.joehelp.com/controller.php?Docs/Document_Grid_Filters.pdf

ET

http://q360help.joehelp.com/Docs/SERVERDATA.pdf
qui est censé à, mais ne redirige pas à:
http://q360help.joehelp.com/controller.php?Docs/SERVERDATA.pdf

Au lieu de cela, j'obtiens une erreur 404 qui est attendue en essayant d'accéder à tout ce qui ne passe pas par le contrôleur. Lorsque j'ajoute manuellement controller.php à l'URL, le fichier se charge correctement. Je suis juste curieux de savoir pourquoi il ne redirige pas correctement. Chaque autre fichier pdf dans tous les autres répertoires fonctionne correctement.

Voici mon fichier web.config:

<?xml version="1.0" encoding="UTF-8"?> 
    <configuration> 
     <system.webServer> 
      <httpRedirect enabled="false" destination="" /> 
      <rewrite> 
       <rules> 
        <rule name="controller redirect" enabled="true" stopProcessing="true"> 
       <match url=".*" /> 
       <conditions> 
        <add input="{HTTP_HOST}" pattern="^(http://)?(www.)?joehelp.com" negate="true" /> 
        <add input="{HTTP_HOST}" matchType="Pattern" pattern="^(http://)?(www.)?q360help.joehelp.com$" ignoreCase="true" negate="false" /> 
        <add input="{URL}" pattern="Data/*" negate="true" /> 
        <add input="{URL}" pattern="Skins/*" negate="true" /> 
        <add input="{URL}" pattern="Resources/*" negate="true" /> 
        <add input="{PATH_INFO}" pattern="^/controller.php*$" negate="true" /> 
       </conditions> 
       <action type="Redirect" url="/controller.php?{R:0}" /> 
      </rule> 
     </rules> 
    </rewrite> 
    <httpErrors errorMode="Detailed" /> 
</system.webServer> 

EDIT: Lors de tests supplémentaires, il semble que d'avoir le mot « données » partout dans l'URL est ce qui cause cette rupture. Est-ce une chose? Je n'ai jamais entendu parler de quelque chose comme ça et en utilisant le testeur de modèle URL Redirect via l'interface graphique dans IIS indique que l'URL devrait rediriger.

À ce stade, ma solution de contournement consiste à modifier le nom du fichier afin qu'il ne possède pas de «données», mais je suis curieux de savoir pourquoi cela se produit.

Répondre

1

Votre problème dans cette ligne:

<add input="{URL}" pattern="Data/*" negate="true" /> 

Parce que vous utilisez non échappés barre oblique /, cette chaînes correspondra à votre regexp:

  • /données/quelque chose
  • /docs/SERVERDATA.pdf
  • /Données
  • /Datasadasdas

Votre solution est facile, vous avez juste besoin d'échapper à cette barre oblique. L'expression rationnelle finale devrait être: Data//*

+0

génial merci! – jprice92