web-dev-qa-db-fra.com

Wordpress Permalink change de point d'interrogation (?) Dans l'URL

Mon URL personnalisée Permalink est /% post_id% /% postname% /

et mon site Web est en langue persane, pour certains messages, le lien permanent est modifié dans l'URL de

http://www.ahangbaz.com/1300/%d8%a7%d8%a8%db%8c-%d8%b7%d9%b%%%%%%%%> % 85% d9% 87/ into -> http://www.ahangbaz.com/1300/?-???????/

mais cela ne se produit pas pour tous les posts, par exemple, le post suivant fonctionne très bien: ahangbaz.com/1106/%D9%82%DB%8C%D8%B5%D8%B1-%D8%A8%D8%B9%D8 % AF-% DA% 86% D9% 86% D8% AF-% D8% B3% D8% A7% D9% 84 /

J'ai vérifié dans la table wp_posts de wordpress et Post_name semble similaire pour les deux publications.

Si je change le nom de post_name en anglais, cela fonctionne bien, mais un problème se produit lorsque post_name est en persan. le serveur Web est IIS 7.5 sur Windows 2008 R2.


Autres tests:

  • J'ai changé le thème et désactivé tous les plugins, ça arrive toujours. J'ai vérifié la colation DB et son UTF8.

  • Pour reproduire le problème, utilisez le post_title = اب - طش - شمه et post_name seront% d8% a7% d8% a8% db% 8c-% d8% b7% d9% be% d8% b4-% da% 86% d8% b4% d9% 85% d9% 87

  • Le même problème se produit avec les catégories lorsque le slug est en persan ahangbaz.com/category/%d8%a7%d8%a8%db%8c ne fonctionne pas mais lorsqu'il est en anglais ou sous un numéro cela fonctionne ahangbaz.com/category/ 22.

6
Robert

Le problème mentionné par @Indolering est lié au module URL Rewrite, à savoir que les URL contenant des caractères UTF-8 ne sont pas correctement transmises lors du traitement par le module URL Rewrite.

Parce que je ne suis pas le propriétaire du serveur et que je ne parviens pas à installer le correctif mentionné (même si j'utilise IIS8.5, le problème existait toujours), j'ai dû contourner ce problème d'une manière ou d'une autre.

La solution proposée par @ pouria-p pour Joomla est également applicable à Wordpress.

Étape 1. Mettez à jour la règle de réécriture dans le fichier web.config

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
            <rule name="WordPress" patternSyntax="Wildcard">
                <match url="*"/>
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                    </conditions>

                    <!-- The changes are applied to this line only -->
                    <action type="Rewrite" url="index.php" />
            </rule></rules>
    </rewrite>
  </system.webServer>
</configuration>

La règle sera la suivante:

<action type="Rewrite" url="index.php?requesturi={URL}" />

Étape 2. Mettez à jour le $_SERVER['REQUEST_URI'] manuellement en ajoutant la ligne suivante en haut du fichier index.php:

if(isset($_GET['requesturi']))
  $_SERVER['REQUEST_URI'] = $_GET['requesturi'];
2
Amer Sawan

Je n'ai pas de capacité de commentaire, mais le problème est très probablement du côté du serveur MS, en particulier du module URL Rewrite. C'est ce qui gère les permaliens sur IIS. Il existe un correctif } pour résoudre ce problème, mais vous devez probablement appliquer tous les correctifs disponibles pour votre système.

1
Indolering