2009-10-17 6 views
0

RewriteRule ^([^/\.]+)/$ $1 [R] réoriente de website.com/abc/ à website.com/home/user/www/abcComment utiliser RewriteRule dans Apache pour rediriger depuis/abc/vers/abc?

Comment puis-je redirigent au bon endroit? (website.com/abc)

+0

Votre hypothèse ne semble pas correcte, votre réécriture redirige 'anything-without-slash /' vers 'anything-without-slash'. Cela signifie que la redirection vers '/ home/etc ...' doit être provoquée ailleurs – Abel

+0

Merci pour la réponse, Abel, mais il n'y a pas d'autres endroits où rediriger les pages, et j'ai supprimé toutes les autres règles de réécriture. Je suis toujours redirigé au mauvais endroit. – admin

+0

Avez-vous une autre règle qui pourrait entrer en conflit avec celle-ci? En général, vous devez placer les règles qui provoquent une redirection externe avant celles qui provoquent une redirection interne. – Gumbo

Répondre

0

La première partie du RewriteRule correspond à la partie correspondante, la seconde à l'expression de remplacement. Pour l'URL complète RewriteRule, ils doivent commencer par ^/ (barre oblique), car un chemin après http://exampl.com commence toujours par le caractère racine-barre oblique. Pour rediriger http://example.com/abc/-http://example.com/abc (enlever la barre oblique arrière) vous pouvez faire ceci:

RewriteEngine On 
RewriteRule ^/([^/]+/$ /$1 [R] 
+0

A) a été omis alors j'ai essayé ces trois: RewriteRule ^/([^ /]) +/$/$ 1 [R] RewriteRule ^/([^ /] +)/$/$ 1 [R] RewriteRule ^/([^ /] + /) $/$ 1 [R] Je suis toujours redirigé vers example.com/home/user/www/abc au lieu de example.com/abc – admin

+0

autres utilisateurs ont laissé un commentaire pour utiliser le ' L' pour finir (L pour Last) et empêcher d'autres règles de réécriture d'apparaître. Aussi, si votre page comprend une redirection, ou s'il y a une redirection dans l'entête de votre page, alors vous pouvez essayer ce que vous voulez dans Apache mais n'aidera pas. Pouvez-vous fournir un exemple de lien où cela se produit? – Abel

0

Il ressemble à l'URL est déjà en cours de réécriture à un nom de fichier et vous réécrivent le nom du fichier. Cela se produit généralement lorsque la règle de réécriture est spécifiée dans un fichier .htaccess. Le problème est dû au fait qu'au moment où Apache lit le fichier .htaccess, il a déjà résolu toutes les URL en noms de fichier. La solution standard consiste à fournir une règle RewriteBase dans votre fichier .htaccess. Essayez:

RewriteBase/

Au-dessus de votre RewriteRule pour commencer.

Plus de documentation est here

+0

En utilisant uniquement cette règle et RewriteEngine sur .htaccess, je suis toujours redirigé vers site.com/home/user/www/abc. Ajouter dans RewriteBase/donne le même résultat – admin

+0

vous mentionnez '.htaccess'. Pouvez-vous ajuster 'httpd.conf' à la place? Êtes-vous sur un environnement d'hébergement où ils ont tout simplement refusé cela? – Abel

+0

Il n'y a aucun moyen de le faire sans RewriteBase? Ce site est déployé sous plusieurs chemins différents (pour les tests/développement), et j'aimerais que le même .htacess fonctionne partout./~ utilisateur/site/... ne cesse d'être changé en/home/user/site, et bien sûr, cette URL n'existe pas!Je ne veux pas mettre/~ user comme RewriteBase, car il faudrait le changer pour "user2" –

0

Vous pouvez essayer avec le L drapeau afin d'éviter toute autre règle à appliquer plus:

RewriteRule ^([^/\.]+)/$ /$1 [R,L] 

Mais si rien ne fonctionne, essayez ceci:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ (/[^/.?\ ]+)/[? ] 
RewriteRule ^[^/.]+/$ %1 [R] 
Questions connexes