2017-09-03 1 views
0

Pour des raisons hors de mon contrôle, j'ai besoin de faire fonctionner une instance de Laravel en tant que sous-répertoire de WordPress dans IIS 10. J'ai essayé toutes les options imaginables dans ma configuration web.config <system.webServer><rewrite><rules />, mais je ne peux jamais faire fonctionner l'un ou l'autre. Si je laisse la règle de réécriture dans WordPress, Laravel ne fonctionne pas (WordPress répond avec un 404) et si je désactive la règle WordPress, Laravel fonctionne mais évidemment pas WordPress.Configurer Laravel comme sous-répertoire de Wordpress sur IIS

Voici la config à la racine du site (où se trouve WordPress):

<rewrite> 
    <rules>   
     <rule name="WordPress" patternSyntax="Wildcard"> 
      <match url="*" /> 
      <conditions> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
       <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 

       <!-- Laravel App --> 
       <add input="{REQUEST_URI}" pattern="^/laravel" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="index.php" /> 
     </rule> 
    </rules> 
</rewrite> 

Merci à une recherche, je suis tombé sur ce (IIS Url Rewrite not working with nested WP installs) qui me fit mettre un web.config imbriqué à l'intérieur le sous-dossier pour l'application Laravel ce qui suit:

<rewrite> 
     <rules> 
      <clear /> 
       <rule name="Imported Rule 2" stopProcessing="true"> 
        <match url="/(.*)$" ignoreCase="false" /> 
        <conditions logicalGrouping="MatchAll"> 
         <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /> 
         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" /> 
        </conditions> 
        <action type="Rewrite" url="public/index.php/{R:1}" /> 
       </rule> 
     </rules> 
    </rewrite> 

Bizarrement, avec ces il presque œuvres - aussi longtemps que je vais à site.com/laravel/public, tout le travail de vues associées et tout jeux bien t ensemble. Je n'arrive pas à faire sortir le/public de l'URL, qui n'est évidemment pas utilisable.

Des conseils? Je suis certain que c'est proche mais je ne peux pas le comprendre.

Répondre

0

L'a reçu! Je suis toujours nouveau à Laravel, donc cela ne m'a pas plus tôt, mais j'ai eu quelques problèmes. Mon fichier racine web.config a été correctement configuré, mais le web.config imbriquée nécessaire d'avoir un match url="*" sur elle, comme ceci:

<rewrite> 
     <rules> 
      <clear /> 
       <rule name="Imported Rule 2" stopProcessing="true" patternSyntax="Wildcard"> 
        <match url="*" ignoreCase="false" /> 
        <conditions logicalGrouping="MatchAll"> 
         <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /> 
         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" /> 
        </conditions> 
        <action type="Rewrite" url="public/index.php/{R:1}" /> 
       </rule> 
     </rules> 

Une fois cela fait, ils travaillaient tous les deux, mais sans inclure /public sur l'URL, j'étais obtenir une erreur 404 - 404 de Laravel, spécifiquement ce qui signifie qu'il fonctionne et ne sait tout simplement pas ce que je demande. Comme une estimation totale, j'ai regardé mes itinéraires et ajouté le sous-répertoire en face d'eux et tout à coup ils travaillent tous! Exemple:

Route::get('/laravel/entities', '[email protected]'); 

Je n'aime pas particulièrement avoir à ajouter la racine dans toutes les routes; Cependant, la nôtre est une situation unique, donc le fait que ces deux puissent même bien jouer ensemble est assez impressionnant.