7
votes

Problème détectant la demande vide_uri avec Apache mod_rewrite

Je suis en cours d'exécution Apache avec une règle de redirection comme ceci: xxx pré>

Ceci redirige avec succès http: //1st-domain.com à http://2nd-domain.com Cependant, lorsque la request_uri est vide, je veux rediriger vers un troisième domaine. P> xxx pré>

mais cela ne fonctionne pas et redirige à la fois 2nddomain.com p>

Mes règles sont commandées comme ceci: P>

<IfModule mod_rewrite.c>
RewriteLog "/home/domain.com/logs/rewrite.log"
RewriteLogLevel 3
</IfModule>


2 commentaires

Stackoverflow.com/questions/5684931


demande_uri n'est jamais vide.


8 Réponses :


12
votes

Cela devrait fonctionner: xxx

espère qu'il aide!

Remarque: Demande_uri est légèrement différente entre httpd.conf et .htaccess, il commence par une barre oblique inverse. httpd.conf. Cela signifie que dans httpd.conf, la première règle de réécriture doit être ^ \ / $ , pas seulement ^ $ .


6 commentaires

Merci d'avoir essayé, mais la deuxième règle choisit à la fois une demande de request_uri vide et non vide. Des pensées?


Ok je l'ai travaillé, mais votre réponse était très proche. A: Apache ne renvoie jamais de demande vide_uri, une demande vide passe comme '/' alors je viens de changer la première règle de réécriture à ^ \ / $ et ça marche!


@CrunchyT: vos règles de réécriture sont dans httpd.conf, correct? J'ai testé le mien dans .htaccess. Demande_uri est légèrement différente entre httpd.conf et .htaccess, il commence par une barre oblique inverse supplémentaire dans httpd.conf. Heureux que vous ayez compris! :)


Exactement, moi aussi je devais utiliser ^ \ / $, parce que j'ai mis la règle dans httpd.conf. Cela fonctionne comme un charme, merci beaucoup!


Ne fonctionne pas pour moi, je ne pense pas que Slash Besoin de s'échapper.


La variable request_uri serveur TOUJOURS a un préfixe SLASH, quel que soit l'endroit où il est utilisé. Mais ce n'est pas la variable request_uri serveur utilisé ici; C'est l'URL-PATH correspondant par le Rewriterule motif - c'est ce chemin d'URL qui diffère entre Server et Annuaire < / i> (c.-à-d. .htaccess ) contexte.



0
votes

Vos règles redirigent la demande avec vide Query_string CODE>.

Pour Demande_uri, vous pouvez utiliser P>

RewriteCond %{HTTP_HOST} ^1st-domain\.com$
RewriteRule ^$ http://3rd-domain.com$1 [R=permanent,L]

RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.*)$ http://2nd-domain.com$1 [R=permanent,L]


0 commentaires

12
votes

J'utilise ce qui suit pour attraper Demande_url vide:

rewriteEngine sur

réécritecond% {request_uri} "^ / $"

rewrétrule ^ (. *) http: //% {http_host} / mon / une autre / url


2 commentaires

Comment vérifier si ce n'est pas vide?


@harrrrrrrrrry Vous pouvez préfixer la regex avec ! à nier it. par exemple. ! ^ / $



0
votes

sur multisites Une telle redirection fonctionne pour moi pour des demandes vides: xxx


0 commentaires

0
votes

Si la demande est vide Apache 'redirects' à index.html donc -rewritecond% {request_uri} index- pourrait vous aider.


0 commentaires

2
votes

Cela devrait fonctionner:

RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.*)$ http://2nd-domain.com$1 [R=permanent,L]
RedirectMatch ^/$ http://3rd-domain.com 


0 commentaires

0
votes

J'ai essayé les options indiquées sur cette page, tout ce que je voulais, c'était de vérifier si la request_uri est vide (ou dans ce cas particulier, un / ): xxx < / p>


2 commentaires

"Vérification d'une barre oblique était plus difficile"? ^ / $


En plus d'être une réponse ancienne, je crois qu'il y avait une raison pour laquelle ce n'était pas une option. Ne peux pas penser à cela



1
votes

Ceci a fonctionné pour moi:

RewriteCond %{HTTP_HOST} ^(www\.)?1st-domain\.com$
RewriteCond %{REQUEST_URI} ^/$
RewriteRule .* http://3rd-domain.com/ [L,R=permanent]

RewriteCond %{HTTP_HOST} ^.*$
RewriteRule .* http://2nd-domain.com%{REQUEST_URI} [L,R=permanent]


0 commentaires