Question

J'ai un client qui préfère fortement à désactiver les fichiers .htaccess parce qu'ils aiment définir les configurations Apache eux-mêmes. Cependant, ils veulent toujours des URL SEO-friendly.

Est-il possible d'avoir permaliens personnalisés sans fichier .htaccess? Ma recherche semble donc loin d'indiquer cela est impossible, mais peut-être l'un des développeurs brillants sait comment l'apparence impossible peut être possible. Merci à l'avance!

Était-ce utile?

La solution

Salut Lee @ Mike :

Pour répondre à votre question, il est utile de comprendre comment tout fonctionne.

Apache sert URL qui correspondent à des fichiers et répertoires

Apache est conçu pour servir les fichiers mis en correspondance explicitement par URL, ou pour servir le index.php trouvé dans un répertoire lorsque le répertoire est indiqué explicitement.

Mais Apache peut servir URL Appariées avec Regex mod_rewrite

Si vous voulez Apache pour faire correspondre les URL où il n'y a pas de véritables répertoires (le cas permaliens WordPress et jolies) alors vous devez avoir un moyen de dire Apache comment gérer les URL différemment. Et c'est exactement ce que mod_rewrite a été conçu pour permettre; il permet aux administrateurs de serveur la possibilité de règles établies pour les URL correspondants en utilisant des expressions régulières. Les règles de la route le résultat d'autres URL, y compris souvent les fichiers réellement .PHP et parfois avec des paramètres URL passé. Finalement, les règles précisent que les fichiers réels sont bien chargées.

Et mod_rewrite est configuré avec .htaccess ou httpd.conf

Pour configurer mod_rewrite vous ne pouvez le faire à l'intérieur .htaccess ou dans le fichier httpd.conf ou l'un des fichiers qu'il comprend, comme potentiellement httpd-vhosts.conf. En fait, je suis surpris si vous client possède les compétences pour contrôler Apache qu'ils ne le savent pas déjà.

WordPress toujours utilise le fichier .htaccess même simple

Passons à ce que WordPress fait, lorsque vous définissez permaliens WordPress écrit ce qui suit dans le fichier .htaccess, en supposant qu'il est inscriptible ( et dans ce premier exemple en supposant que votre site site est servi à partir de la racine ) :

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Caveat: Lorsque votre WordPress Front Page Directory est pas racine

Si votre site est à la place servi de /blog le fichier de .htaccess écrit ressemblerait à ceci:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

WordPress Routes Toutes les URL de filtrages non fichier / répertoire à index.php

Comme vous pouvez le voir, la seule chose que les utilisations de WordPress .htaccess pour est à la carte any URL du domaine à /index.php (ou /blog/index.php dans le 2ème exemple) sauf lorsqu'une URL correspond à un fichier réel (comme un .jpg / .gif / image .png, une feuille de style .css, un script .js, etc.) ou quand il correspond à un répertoire réel ( qui, autant que je sache, n'est pas pertinent dans un WordPress installation standard).

Dans PHP WordPress Parsis $_SERVER['REQUEST_URI'] Pour décider quoi Charger

Dans son code PHP WordPress saisit la valeur de $_SERVER['REQUEST_URI'] qui contient la requête complète URL sans le domaine et le schéma (c.-à-régime est http ou https) et il analyse la valeur pour déterminer ce qui était URL a demandé et donc quelles pages il devrait charger.

Contourner .htaccess? Qu'Apache Charger URL virtuels (mais bonne chance avec ça!)

Donc, si vous voulez en quelque sorte contourner .htaccess votre travail serait d'obtenir Apache pour répondre à une URL arbitraire puis chargez WordPress et ensemble $_SERVER['REQUEST_URI'] être le chemin d'URL ainsi que les paramètres; OIEau usurpation d'identité, mais d'une bonne façon. Cela dit, je sais que si connaissance d'aucune façon qui ne sont pas trop compliqué de le faire.

Embedding /index.php/ (peut-être?!?)

Même si * Chris_O * est correct au sujet de préfixer /index.php/ à vos URL je grince des dents chaque fois que je vois cela. Il ajoute 10 caractères à chaque URL qui les rend plus et moins significatif pour les moteurs de recherche, mais bien pire les rend moins partageable et regarde cryptique aux utilisateurs. Désolé Chris Je sais que vous voulait bien faire, mais ugh!

Créer un réel répertoires pour URL Chaque (peut-être?)

Une façon de Pretty permaliens sans toucher Apache serait d'écrire un script qui générerait un répertoire réel pour chaque URL que vous souhaitez puis stocker un index.php là que chargerait WordPress. Bien sûr, ce serait énorme effort pour le bénéfice minuscule et il faudrait le serveur d'avoir accès en écriture qui doit être pire que d'utiliser un fichier .htaccess.

Je déteste l'admettre, mais c'est ce que je faisais vers 1998 avec un site Web basé .ASP-quand IIS ne prend pas en charge la réécriture d'URL (et même aujourd'hui, il est encore un vrai PITA!) Ce fut une bidouille horrible, était une douleur à maintenir et je détestais, mais les URL étaient super que pour les utilisateurs et pour le référencement!

La meilleure solution? Ajouter des règles Réécrire httpd.conf

Retour à ce qui est probablement la meilleure solution, et @Simon Brown en fait il a recommandé; ajouter vos règles de réécriture à httpd.conf ou l'un des fichiers inclus comme httpd-vhosts.conf Ajouter la prise directive suivante vous de changer le répertoire pour correspondre au répertoire de votre site (ce qui est la façon dont Apache est configuré à localhost sur mon Mac.):

<Directory "/home/example_user/public_html/">
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>

Bonus! Avec Lockdown Comes Performance Trop

Cette dernière option devrait éliminer tout retour de contrôle .htaccess et mis dans leurs mains. Mieux encore, il est un peu plus performant depuis httpd.conf est chargé une seule fois quand Apache démarre mais Les fichiers .htaccess sont chargés et analysés à chaque requête d'URL!

P.S. Une chose à considérer serait de Apache frontal avec un serveur de mise en cache comme Nginx que je crois devenir les meilleures pratiques pour les sites WordPress trafic élevé vraiment besoin d'être performant. Il pourrait prendre peaufinage sur le terrain vert parce que je ne pense pas que la plupart des gens utilisent Nginx pour faire la réécriture d'URL pour Apache, mais si ce que les intérêts de direction, vous voici quelques liens de poursuivre:

Autres conseils

Permalinks sans mod_rewrite

Sans un fichier .htaccess ou modifier votre fichier httpd.conf le meilleur que vous pouvez faire est pathinfo permaliens. Pathinfo permaliens sont les mêmes que jolies permaliens, sauf qu'ils commencent par index.php.

Pour utiliser pathinfo permaliens mis index.php / au début de votre structure permalien personnalisée:

/index.php/%postname%/

Voir la Codex article pour plus d'informations.

De retour dans les mauvais jours, WordPress nécessaire pour écrire un nouveau fichier de configuration à chaque fois que vous avez changé la structure permalien. Dans les installations modernes, les RewriteRules sont immuables:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Toutes les demandes de fichiers non-Existant (ie. Un chemin permalien personnalisé qui ne correspond pas à un fichier sur le système de fichiers) est transmis par index.php et $_SERVER['REQUEST_URI'] indique PHP ce qui a été demandé. Votre client peut définir les règles de réécriture dans httpd.conf ou .htaccess, et vous aurez pas besoin de le modifier comme vous tordre la structure permalien.

Certains plugins ne tentent de modifier .htaccess eux-mêmes, ou vous demander de modifier le fichier. Cette solution ne peut pas être pour tout le monde, mais il est utile d'examiner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top