2017-06-27 1 views
0

Besoin d'aide avec la règle de réécriture htaccess Je suis coincé avec.Comment faire pour mapper toutes les demandes sauf les fichiers existants à un gestionnaire

J'ai un gestionnaire index.html qui est utilisé pour gérer toutes les demandes sauf les fichiers existants. J'utilise cette règle:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.html [L] 

Mais j'ai quelques noms similaires aux demandes à traiter. S'il y a une requête à/main, elle doit être traitée par index.html mais à cause du fichier existant avec l'extension - main.asdfjaskldfjaskdfjasfd.js - je reçois l'erreur 404 de traitement.

Ce problème est très facile à résoudre dans nginx avec une ligne: "try_files $ uri $ uri//index.html;" mais je n'ai pas l'occasion d'utiliser nginx en production - seulement Apache.

J'ai donc besoin d'aide avec ces règles. Essayé (en plus des dizaines d'autres) ceci:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d 
RewriteRule^- [L] 
RewriteRule^/index.html 

htaccess complète:

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteCond %{HTTPS} off 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

# Redirect Trailing Slashes If Not A Folder... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# Handle Front Controller... 
RewriteCond %{REQUEST_URI} ^/(demo-auth|api|oauth|password|login|logout|register|images) 
RewriteRule^laravel.php [L] 

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f 
RewriteRule^/index.html 

RewriteCond %{HTTP:Authorization} . 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

Merci à l'avance.

Répondre

1

Ajoutez que, au sommet de votre htaccess, pour désactiver MultiViews:

Options -MultiViews 

Le Apache docs on mod_negotiation, décrit ce que l'option Multiviews fait, lorsqu'il est activé:

Si le serveur reçoit un demande pour/un/dir/foo et/un/dir/foo n'existe pas, alors le serveur lit le répertoire à la recherche de tous les fichiers nommés foo. *, et fausse effectivement une carte de type qui nomme tous ceux fichiers, en leur attribuant les mêmes types de médias et encodages de contenu aurait si le client avait demandé l'un d'eux par son nom. Il choisit alors la meilleure correspondance avec les exigences du client et renvoie le document .

+1

Ouais ... C'était la faute de Multiviews. C'était AWS et il a une configuration spécifique. Par exemple, c'était par défaut dans Debian mais pas sur AWS. J'ai donc mis cette option à htaccess et tout s'est bien passé. [email protected] – Korben