www contre les non-www et les sous-bandes avec spécial .htaccess

Dans mon dossier racine, les entrées suivantes
https://example.org
et
http://example.org
et redirige vers la version appropriée (http ou https) avec ajouté www. (Cette exigence qu'ils avaient avec un système de publicité).

Cependant, le problème réside dans le fait que le sous-répertoire utilise la technique "directement dans index.php», que vous voyez quand encodage MVC dans PHP. Il ignore complètement la règle www.

Mon problème est que j'ai besoin pour les sous-répertoires, même s'ils ont .htaccess, Règle de racine utilisée .htaccess Pour la redirection www.

Que puis-je faire pour vous assurer que le sous-répertoire .htaccess Applique la règle www du maître, ou du moins éditer le sous-répertoire .htaccess?

# ROOT .htaccess FILE
RewriteEngine on

# IF HTTPS OFF AND NO WWW, REDIRECT TO [url=HTTP://WWW.]HTTP://WWW.[/url]*
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^example.org$
RewriteRule ^(.*)$ [url=http://www.example.org/]http://www.example.org/[/url]$1 [R=301,L]

# IF HTTPS ON AND NO WWW, REDIRECT TO [url=HTTPS://WWW.]HTTPS://WWW.[/url]*
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^example.org$
RewriteRule ^(.*)$ [url=https://www.example.org/]https://www.example.org/[/url]$1 [R=301,L]

Celui qui se trouve dans plusieurs sous-répertoires ressemble à ceci:

# SUBDIR .htaccess FILE
Options All +FollowSymLinks -Indexes -Multiviews

# BLOCK ROBOTS AND SPIDERS FROM SCANNING CERTAIN FILES
IndexIgnore .htaccess *~ *.txt *.sql *.xml

# BLOCK SOME COMMON FILE TYPES FROM END USERS
<filesmatch "\.(sql|xml|txt|htaccess)"="">
Deny from all
</filesmatch>
<filesmatch ".*~$"="">
Deny from all
</filesmatch>

RewriteEngine On

# BESIDES BLOCKED FILES ABOVE, OR FILES WE PHYSICALLY HAVE IN THIS DIRECTORY,
# REDIRECT ALL OTHER OUTPUT TO index.php AND PASS ALL URL PARAMETERS IN FULL.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [QSA]

Notez que j'ai essayé quelque chose comme celui-ci dans les fichiers. subdir .htaccess, Mais ça a échoué - j'ai eu 404s dans les chemins subdir.

# SUBDIR .htaccess FILE
Options All +FollowSymLinks -Indexes -Multiviews

# BLOCK ROBOTS AND SPIDERS FROM SCANNING CERTAIN FILES
IndexIgnore .htaccess *~ *.txt *.sql *.xml

# BLOCK SOME COMMON FILE TYPES FROM END USERS
<filesmatch "\.(sql|xml|txt|htaccess)"="">
Deny from all
</filesmatch>
<filesmatch ".*~$"="">
Deny from all
</filesmatch>

RewriteEngine On

# IF HTTPS OFF AND NO WWW, REDIRECT TO [url=HTTP://WWW.]HTTP://WWW.[/url]*
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^example.org$
RewriteRule ^(.*)$ [url=http://www.example.org/]http://www.example.org/[/url]$1 [R=301,L]

# IF HTTPS ON AND NO WWW, REDIRECT TO [url=HTTPS://WWW.]HTTPS://WWW.[/url]*
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^example.org$
RewriteRule ^(.*)$ [url=https://www.example.org/]https://www.example.org/[/url]$1 [R=301,L]

# BESIDES BLOCKED FILES ABOVE, OR FILES WE PHYSICALLY HAVE IN THIS DIRECTORY,
# REDIRECT ALL OTHER OUTPUT TO index.php AND PASS ALL URL PARAMETERS IN FULL.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [QSA]

ÉDITER:

Par exemple...

Je veux aller à:

 1 [url=http://example.org/]http://example.org/[/url]
2 [url=http://www.example.org/]http://www.example.org/[/url]
3 [url=https://example.org/]https://example.org/[/url]
4 [url=https://www.example.org/]https://www.example.org/[/url]
5 [url=http://example.org/test/something.php]http://example.org/test/something.php[/url]
6 [url=http://example.org/test/]http://example.org/test/[/url]
7 [url=https://www.example.org/test/]https://www.example.org/test/[/url]
8 [url=https://www.example.org/test/update-user]https://www.example.org/test/update-user[/url]

... et le dossier de test est une plate-forme PHP MVC, Par conséquent, dans ce dossier, la méthode est utilisée pour "diriger tout sur index.php».

... Et donc je veux que ce qui précède soit traduit sur:

 1 [url=http://www.example.org/]http://www.example.org/[/url]
2 [url=http://www.example.org/]http://www.example.org/[/url]
3 [url=https://www.example.org/]https://www.example.org/[/url]
4 [url=https://www.example.org/]https://www.example.org/[/url]
5 [url=http://www.example.org/test/something.php]http://www.example.org/test/something.php[/url]
6 [url=http://www.example.org/test/]http://www.example.org/test/[/url]
7 [url=https://www.example.org/test/]https://www.example.org/test/[/url]
8 [url=https://www.example.org/test/update-user]https://www.example.org/test/update-user[/url]

Ceci est une stratégie "sous-domaine www. Peu importe ce que. Et faites attention à ce qu'il a conservé https Pas de changement si c'était utilisé.

Le problème est que le fichier .htaccess Le dossier de test ignore ce qui est dans le fichier racine .htaccess, Et je ne sais pas comment éditer le fichier .htaccess dossier de test afin qu'il puisse faire www. chose est correcte. J'ai essayé de le faire (Comme je l'ai démontré ci-dessus dans le troisième exemple du code) et reçu 404 Les erreurs.
Invité:

Cyprien

Confirmation de:

Une des excellentes approches auxquelles semble être renvoyée à Oliver, - C'est créer séparé VHost Pour un site non-www et lui fournir une redirection globale:

<virtualhost *:80="">
ServerName example.org

RedirectPermanent / [url=http://www.example.org/]http://www.example.org/[/url]
</virtualhost>

Sinon, puisque vous changez déjà le subordonné

.htaccess

es, Il suffit de l'ajouter à chacun des subordonnés:

RewriteOptions inherit

Beaucoup plus propre que la nécessité de soutenir le même code de réécriture de niveau racine dans plusieurs

.htaccess

es.

Christian

Confirmation de:

Fixez-le facile. Je l'ai presque eu dans mon exemple que j'ai donné dans la question initiale. Le code suivant prend le fichier .htaccess Pâte subdir, dans lequel il y a une structure PHP MVC, qui utilise "directement tout au fichier index.php», Détecte ceci «www». Le préfixe n'a pas été utilisé, mais ajoute «www». Le préfixe est retourné à nouveau. Les campagnes publicitaires de mon client ont demandé que "www." Ajouté, car la campagne acquise ne peut utiliser qu'un domaine et non deux, sans frais supplémentaires.

Cependant, dans mes tests, j'ai été empêché, car j'ai oublié le cache du navigateur et la redirection constante 301. Si vous êtes précédemment connecté à la page pendant des expériences, vous devrez peut-être effacer le cache du navigateur. Cela est dû au fait que la redirection a été utilisée lors d'expériences 301, Et cela indique le navigateur localement le cache est redirigé. C'est pourquoi mes tests ont échoué. Redirection temporaire 302 Cela ne fera pas, mais en fait, dans ce cas, la redirection constante 301 Mieux car il est plus rapide pendant la connexion du navigateur. Réorienter. 301 Dites à votre navigateur (Regardez votre cache avant de passer à cette URL pour savoir où aller.), Et redirection 302 Dites à votre navigateur (Je déciderai de l'été où vous devez rediriger).

La correction consiste à ajouter des informations sur le sous-répertoire au fichier .htaccess. Donc, si j'ai un sous-répertoire nommé «test» avec votre propre fichier .htaccess À l'intérieur, j'ai besoin d'ajouter ces informations. Notez que / test / Ajouté ci-dessous. Et si j'avais ce fichier à l'intérieur / test / test2, J'aurais besoin d'ajouter / test / test2 / Dans ce fichier .htaccess. Prendre?

# SUBDIR .htaccess FILE
Options All +FollowSymLinks -Indexes -Multiviews

# BLOCK ROBOTS AND SPIDERS FROM SCANNING CERTAIN FILES
IndexIgnore .htaccess *~ *.txt *.sql *.xml

# BLOCK SOME COMMON FILE TYPES FROM END USERS
<filesmatch "\.(sql|xml|txt|htaccess)"="">
Deny from all
</filesmatch>
<filesmatch ".*~$"="">
Deny from all
</filesmatch>

RewriteEngine On

# IF HTTPS OFF AND NO WWW, REDIRECT TO [url=HTTP://WWW.]HTTP://WWW.[/url]*
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^example.org$
RewriteRule ^(.*)$ [url=http://www.example.org/test/]http://www.example.org/test/[/url]$1 [R=301,L]

# IF HTTPS ON AND NO WWW, REDIRECT TO [url=HTTPS://WWW.]HTTPS://WWW.[/url]*
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^example.org$
RewriteRule ^(.*)$ [url=https://www.example.org/test/]https://www.example.org/test/[/url]$1 [R=301,L]

# BESIDES BLOCKED FILES ABOVE, OR FILES WE PHYSICALLY HAVE IN THIS DIRECTORY,
# REDIRECT ALL OTHER OUTPUT TO index.php AND PASS ALL URL PARAMETERS IN FULL.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [QSA]

Georges

Confirmation de:

Une solution simple créerait un dossier racine séparé pour le site example.org.

Pour répondre aux questions, connectez-vous ou registre