Apache: Hôte Virtuel et la Réécriture d'URL à l'intérieur de httpd.conf pour Kohana Cadre
Je suis en utilisant le Framework Kohana 3.x. Mon Serveur web est Apache et j'utilise des Hôtes Virtuels, parce que je gère plus d'un des sites web avec mon Serveur.
Mon httpd.conf ressemble à ceci:
<VirtualHost *:80>
ServerName www.myPage1.com
ServerAlias myPage1.com
DocumentRoot /var/www/myPage1
</VirtualHost>
<VirtualHost *:80>
ServerName www.myPage2.com
ServerAlias myPage2.de
DocumentRoot /var/www/myPage2
</VirtualHost>
Dans Kohana chaque requête http besoins d'aller à la index.php d'abord. Parce que je n'aime pas ces vilaines Url qui commence par index.php (par exemple www.myPage1.com/index.php/item/detail/itemId) j'ai utilisé le suivant .fichier htaccess qui a parfaitement fonctionné
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /
# Protect hidden files from being viewed
<Files .*>
Order Deny,Allow
Deny From All
</Files>
# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
Je voudrais maintenant pour ne pas utiliser un .fichier htaccess plus et au lieu de mettre tous la réécriture logique dans mon httpd.fichier conf. La suite me donne un "400 Bad Request"
<VirtualHost *:80>
RewriteEngine On
<Files .*>
Order Deny,Allow
Deny From All
</Files>
RewriteRule ^(?:aplication|modules|system)\b.* index.php/$0 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT]
ServerName www.myPage2.com
ServerAlias myPage2.com
DocumentRoot /var/www/myPage2
</VirtualHost>
Ce que je fais mal? De l'aide serait apprécié!
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas un RewriteBase dans votre httpd.conf. Et quel est le problème avec la .htaccess?
.htaccess
, le principal étant un disque supplémentaire d'accès pour chaque sous-répertoire de la racine du document dans le chemin de la requête, sur chaque demande. Votre serveur s'exécute à un rythme beaucoup plus rapide si vous tournez la numérisation de ces fichiers (AllowOverride None
).Si vous utilisez mod_rewrite dans un
VirtualHost
bloc avec laREQUEST_FILENAME
condition, vous pas obtenir le nom de fichier (c'est par la documentation). Au lieu de cela, cette variable contient la même valeur queREQUEST_URI
, qui contient le chemin d'accès à l'exclusion de la chaîne de requête.Citant le au-dessus de la page liée:
Cependant, j'ai trouvé que le solution proposée
%{LA-U:REQUEST_FILENAME}
ne fonctionne pas, au moins pas pour les hôtes virtuels sur mon serveur. Pour être sûr de votreRewriteCond
lignes de fonctionner comme prévu dans unVirtualHost
bloc, vous devez préfixer avecDOCUMENT_ROOT
, donc:Cette méthode fonctionnera toujours. Le commutateur à
_URI
est dans le cas oùREQUEST_FILENAME
un jour renvoie le nom de fichier réel, afin d'éviter une double préfixation de la racine du document.Rappelez-vous, si vous mettez ces règles dans le serveur principal conf fichier (généralement httpd.conf) plutôt qu'une .fichier htaccess, vous aurez besoin de l'utiliser ^/... ... au lieu de ^... ... au début de la règle qui la ligne, en d'autres termes, ajouter une barre oblique.
vérifier cela, peut aider.
pourrait-il être à cette faute de frappe (peut-être qu'il devrait être l '"application"):