Maison >développement back-end >tutoriel php >Expliquer les connaissances pertinentes de RewriteCond et 13 exemples d'applications mod_rewrite Apache pseudo-statique
1. Ajoutez la balise www au nom du sous-domaine
RewriteCond %{HTTP_HOST} ^([a-z.]+)?example.com$ [NC]
RewriteCond %{HTTP_HOST} !^www. [NC ]
RewriteRule .? http://www.xample.com%{REQUEST_URI} [R=301,L]
Cette règle capture la variable %1 du nom de domaine de deuxième niveau si c'est le cas. ne commencez pas par www, puis ajoutez www, suivi du nom de domaine précédent et de {REQUEST_URI}.
2. Supprimez la balise www dans le nom de domaine
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule .? =301 ,L] 3. Supprimez la balise www, mais enregistrez le sous-domaine
RewriteCond %{HTTP_HOST} ^www.(([a-z0-9_]+.)?example.com)$ [ NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]
Ici, lorsque la variable 1% correspond, le nom du sous-domaine sera en %2 (atome interne ) Capturé, et c'est de cette variable %1 dont nous avons besoin. 4. Empêchez le hotlinking d'images
Certains webmasters feront tout pour relier vos images à leurs sites Web, consommant ainsi votre bande passante. Vous pouvez ajouter du code pour empêcher ce comportement.
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?example.com/ [NC]
RewriteRule .(gif|jpg|png)$ - [F]
Si la valeur {HTTP_REFERER} n'est pas vide, ou ne provient pas de votre propre nom de domaine, cette règle utilise [F]FLAG pour bloquer les URL se terminant par gif|jpg|png
Si ce type du lien chaud est Vous êtes absolument méprisé, et vous pouvez également modifier l'image pour faire savoir aux utilisateurs qui visitent le site Web hotlink que le site Web vole votre image.
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?example.com/.*$ [NC]
RewriteRule .(gif|jpg| png)$ Votre adresse d'image [R=301,L]
En plus d'empêcher les liens hypertexte d'image, les règles ci-dessus remplaceront toutes les images liées par un lien hypertexte par les images que vous avez définies.
Vous pouvez également empêcher des noms de domaine spécifiques de créer des liens dynamiques avec vos images :
RewriteCond %{HTTP_REFERER} !^http://(www.)?leech_site.com/ [NC]
RewriteRule .(gif|jpg |png)$ - [F,L]
Cette règle bloquera toutes les demandes de liens d'images sur la liste noire des noms de domaine.
Bien entendu, les règles ci-dessus sont basées sur {HTTP_REFERER} pour obtenir le nom de domaine. Si vous souhaitez l'utiliser comme adresse IP, utilisez simplement {REMOTE_ADDR}.
5. Si le fichier n'existe pas, redirigez vers la page 404
Si votre hébergeur ne propose pas de service de redirection de page 404, alors nous le créerons nous-mêmes.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? /404.php [L]
Ici -f correspond au nom de fichier existant, -d correspond le chemin d'accès existant. Ce code déterminera si votre nom de fichier et votre chemin d'accès existent avant d'effectuer une redirection 404. Vous pouvez également ajouter un paramètre ?url=$1 à la page 404 :
RewriteRule ^/?(.*)$ /404.php?url=$1 [L]
De cette façon, votre page 404 peut être Certaines autres choses, telles que la confiance par défaut, l'envoi d'un rappel par e-mail, l'ajout d'une recherche, etc.
6. Renommer le répertoire
Si vous souhaitez renommer un répertoire sur votre site Web, essayez ceci :
RewriteRule ^/?old_directory/([a-z/.]+)$ new_directory/$1 [R= 301 ,L]
Dans la règle, j'ai ajouté un "." (notez qu'il ne représente pas tous les caractères, il y a un caractère d'échappement devant) pour correspondre à l'extension du fichier. 7. Convertissez le suffixe .html en .php
À condition que le fichier .html soit toujours accessible, mettez à jour le lien de votre site Web.
RewriteRule ^/?([a-z/]+).html$ $1.php [L]
Ceci n'est pas une redirection Web, il n'est donc pas visible pour les visiteurs. Faites-en une redirection permanente (visible) et modifiez FLAG en [R=301,L].
8. Créez des liens sans extensions de fichiers
Si vous souhaitez rendre les liens vers votre site Web PHP plus concis et plus faciles à retenir - ou masquer les extensions de fichiers, essayez ceci :
RewriteRule ^/?([ a-z] +)$ $1.php [L]
Si le site Web contient un mélange de fichiers PHP et HTML, vous pouvez utiliser RewriteCond pour d'abord déterminer si le fichier avec le suffixe existe, puis le remplacer :
RewriteCond %{ REQUEST_FILENAME}.php -f
RewriteRule ^/?([a-zA-Z0-9]+)$ $1.php [L]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^/ ?([a -zA-Z0-9]+)$ $1.html [L]
Si le fichier a un suffixe .php, cette règle sera exécutée.
9. Vérifiez des paramètres spécifiques dans les variables de requête
S'il y a un paramètre spécial dans l'URL, vous pouvez utiliser RewriteCond pour identifier son existence :
RewriteCond %{QUERY_STRING} !uniquekey=
RewriteRule ^/?script_that_requires_uniquekey.php$ other_script.php [QSA,L]
Les règles ci-dessus vérifieront si le paramètre uniquekey dans {QUERY_STRING} existe. Si la valeur de {REQUEST_URI} est script_that_requires_uniquekey, il sera dirigé vers la nouvelle URL.
10. Supprimer les variables de requête
Le module mod_rewrite d'Apache reconnaîtra automatiquement les variables de requête à moins que vous n'apportiez les modifications suivantes :
a Attribuez un nouveau paramètre de requête (vous pouvez utiliser [QSA,L] FLAG enregistre le). variable de requête d'origine)
b). Ajoutez un "?" après le nom du fichier (comme index.php ?). Le symbole "?" ne sera pas affiché dans la barre d'adresse du navigateur. 11. Affichez l'URI actuel dans le nouveau format
s'il s'agit des URL que nous exécutons actuellement : /index.php?id=nnnn. Nous aimerions beaucoup changer cela en /nnnn et que les moteurs de recherche affichent le nouveau format. Tout d’abord, afin de mettre à jour le moteur de recherche vers le nouveau, nous devons rediriger les anciennes URL vers le nouveau format, mais nous devons également nous assurer que l’ancien index.php peut toujours s’exécuter. Êtes-vous confus par moi?
Pour réaliser la fonction ci-dessus, l'astuce consiste à ajouter un marqueur "marker" invisible pour les visiteurs dans la variable de requête. Nous redirigeons uniquement les liens qui n'ont pas la balise "marker" dans la variable de requête, puis remplaçons le lien d'origine par le nouveau format et ajoutons une balise "marker" aux paramètres existants via [QSA] FLAG. Voici la méthode d'implémentation :
RewriteCond %{QUERY_STRING} !marker
RewriteCond %{QUERY_STRING} id=([-a-zA-Z0-9_+]+)
RewriteRule ^/?index. php $ %1 ? [R=301,L]
RewriteRule ^/?([-a-zA-Z0-9_+]+)$ index.php?marker &id=$1 [L]
Ici, original L'URL : http://www.example.com/index.php?id=nnnn ne contient pas de marqueur, elle est donc redirigée en permanence vers http://www.example.com/nnnn par la première règle et la seconde un. La règle redirige http://www.example.com/nnnn vers http://www.example.com/index.php?marker&id=nnnn, et ajoute deux variables, Marker et id=nnnn, et enfin mod_rewrite démarre. . Effectuer le processus de traitement.
La deuxième correspondance, le marqueur correspond, alors ignorez la première règle. Il y a ici un caractère "." qui apparaîtra dans http://www.example.com/index.php?marker &id=nnnn, donc The. la deuxième règle sera également ignorée, nous avons donc terminé.
Notez que cette solution nécessite certaines extensions d'Apache, vous rencontrerez donc de nombreux obstacles si votre site web est placé sur un hébergeur mutualisé. 12. Assurez-vous que le service de sécurité est activé
Apache peut utiliser deux méthodes pour identifier si vous avez activé le service de sécurité, en faisant respectivement référence aux variables {HTTPS} et {SERVER_PORT} :
RewriteCond %{ REQUEST_URI} ^secure_page.php$
RewriteCond %{HTTPS} !on
RewriteRule ^/?(secure_page.php)$ https://www.example.com/$1 [R=301 ,L]
Les règles ci-dessus testent si la valeur {REQUEST_URI} est égale au code de notre page sécurisée et si {HTTPS} n'est pas égal à on. Si ces deux conditions sont remplies en même temps, la requête sera redirigée vers l'URI du service sécurisé. De plus, vous pouvez utiliser {SERVER_PORT} pour faire le même test. 443 est un port de service de sécurité couramment utilisé
RewriteCond %. {REQUEST_URI} ^secure_page.php$
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(secure_page.php)$ https://www.example.com/$1 [R=301,L ]
13. Appliquer les services de sécurité sur une page spécifique
Lorsque vous rencontrez un nom de domaine de service de sécurité et un nom de domaine de service non-sécurité dans le même répertoire racine du serveur, vous devez utiliser RewriteCond pour déterminer si le service de sécurité le port est Occupy et nécessite uniquement les pages de la liste suivante pour servir de sécurité :
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(page1|page2|page3|page4|page5)$ https ://www .example.com/%1[R=301,L]
Voici comment renvoyer une page qui n'est pas définie comme service sécurisé sur le port 80 :
RewriteCond %{ SERVER_PORT } ^ 443$
RewriteRule !^ /?(page6|page7|page8|page9)$http://www.example.com%{REQUEST_URI} [R=301,L]
Cet article explique RewriteCond et 13 Un exemple d'application mod_rewrite et les connaissances associées sur le pseudo-statique Apache Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois.
Recommandations associées :
Comprendre la différence entre le proxy direct et le proxy inverse
Comment utiliser Apache pour créer un hôte virtuel
Comment démarrer et surveiller le processus sh memcached
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!