it-swarm.com.de

Wordpress Permalink ändert sich in Fragezeichen (?) In URL

Meine benutzerdefinierte Permalink-URL lautet /% post_id% /% postname% /

und meine website ist in persischer sprache, bei einigen posts ändert sich der permalink in der url von

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

dies ist jedoch nicht bei allen Posts der Fall, da beispielsweise der folgende Post einwandfrei funktioniert: 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 /

Ich habe die wp_posts-Tabelle von WordPress eingecheckt und Post_name scheint für beide Posts ähnlich zu sein.

Wenn ich den post_name in Englisch ändere, funktioniert es gut, aber wenn post_name auf Persisch ist, tritt ein Problem auf. Webserver ist IIS 7.5 unter Windows 2008 R2.


Weitere Tests:

  • Ich habe das Thema geändert und alle Plugins deaktiviert, es passiert immer noch. Ich habe die Datenbanksammlung und deren UTF8 überprüft.

  • Um das Problem zu reproduzieren, verwenden Sie post_title = ابی - طپش - چشمه und post_name lautet% d8% a7% d8% a8% db% 8c-% d8% b7% d9% be% d8% b4-% da% 86% d8% b4% d9% 85% d9% 87

  • Dasselbe Problem tritt bei Kategorien auf, wenn sich der Slug in Persisch befindet. Ahangbaz.com/category/%d8%a7%d8%a8%db%8c funktioniert nicht, aber wenn es in Englisch oder einer Zahl ist, funktioniert es. Ahangbaz.com/category/ 22.

6
Robert

Das als @Indolering erwähnte Problem hängt mit dem URL-Rewrite-Modul zusammen, dass die URLs, die UTF-8-Zeichen enthalten, beim Verarbeiten durch das URL-Rewrite-Modul nicht korrekt übergeben werden.

Da ich nicht der Serverbesitzer bin und den erwähnten Hotfix nicht installieren kann (obwohl ich IIS8.5 verwende, ist das Problem immer noch vorhanden), musste ich das irgendwie umgehen.

Die von @ pouria-p für Joomla vorgeschlagene Lösung gilt auch für Wordpress.

Schritt 1. Aktualisiere die Umschreiberegel in der web.config-Datei

<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>

Die Regel lautet wie folgt:

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

Schritt 2. Aktualisieren Sie den $_SERVER['REQUEST_URI'] manuell, indem Sie die folgende Zeile oben in die index.php-Datei einfügen:

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

Ich habe keine Kommentarfunktionen, aber es ist sehr wahrscheinlich, dass das Problem auf der Seite des MS-Servers liegt, insbesondere beim URL-Rewrite-Modul. Dies ist, was Permalinks auf IIS behandelt. Es gibt einen Hotfix für dieses Problem, aber Sie sollten wahrscheinlich alle für Ihr System verfügbaren Hotfixes anwenden.

1
Indolering