6

問題の簡単な説明

したがって、問題は基本的に、サイトの翻訳バージョンで wpml を使用してサブカテゴリを使用すると、404 ページが生成されることです。親カテゴリでは、投稿を表示して、問題なく移動できます。また、翻訳されていないバージョンでも問題なく動作します。

私の質問

私の質問は、他の誰かがこの問題を抱えているかどうかです。もしそうなら、どのように解決しましたか?


うまくいけば役立つ情報

ソフトウェア

  • PHP - 5.2
  • ワードプレス - 3.3.2
  • WPML 多言語 CMS - 2.4.3
  • WPML 文字列翻訳 - 1.3.0

パーマリンク設定

/%category%/%postname%/

私が試したこと

  • 他のすべてのプラグインを無効にしてみました
  • パーマリンクのフラッシュを試みました編集

追加情報

  • サブカテゴリへの URL が「ページ」として認識されているようですedit
  • 代わりに、手動で URL に直接移動し、URL から親カテゴリを差し引くと、予想されるカテゴリ アーカイブ ページに到達しますedit
    : http://domain.com/en/super/sub/->http://domain.com/en/sub/
私の .htaccess ファイル:
# BEGIN Redirects
RedirectMatch 301 ^/okategoriserade/(.*)$ /webb/$1
RedirectMatch 301 ^/apache2/(.*)$ /apache/$1
RedirectMatch 301 ^/server/(.*)$ /linux/$1
RedirectMatch 301 ^/etiketter/(.*)$ /tag/$1
RedirectMatch 301 ^/kategorier/(.*)$ /$1
RedirectMatch 301 ^/en/php-en/zf2/(.*)$ /en/zf2/$1
RedirectMatch 301 ^/media/me-avatar-e1332014347355.png(.*)$ /media/erik-landvall.png$1
RedirectMatch 301 ^/jquery/(.*)$ /javascript/jquery/$1
# END Redirects

# BEGIN W3TC Browser Cache
<IfModule mod_mime.c>
    AddType text/css .css
    AddType application/x-javascript .js
    AddType text/x-component .htc
    AddType text/html .html .htm
    AddType text/richtext .rtf .rtx
    AddType image/svg+xml .svg .svgz
    AddType text/plain .txt
    AddType text/xsd .xsd
    AddType text/xsl .xsl
    AddType text/xml .xml
    AddType video/asf .asf .asx .wax .wmv .wmx
    AddType video/avi .avi
    AddType image/bmp .bmp
    AddType application/java .class
    AddType video/divx .divx
    AddType application/msword .doc .docx
    AddType application/vnd.ms-fontobject .eot
    AddType application/x-msdownload .exe
    AddType image/gif .gif
    AddType application/x-gzip .gz .gzip
    AddType image/x-icon .ico
    AddType image/jpeg .jpg .jpeg .jpe
    AddType application/vnd.ms-access .mdb
    AddType audio/midi .mid .midi
    AddType video/quicktime .mov .qt
    AddType audio/mpeg .mp3 .m4a
    AddType video/mp4 .mp4 .m4v
    AddType video/mpeg .mpeg .mpg .mpe
    AddType application/vnd.ms-project .mpp
    AddType application/x-font-otf .otf
    AddType application/vnd.oasis.opendocument.database .odb
    AddType application/vnd.oasis.opendocument.chart .odc
    AddType application/vnd.oasis.opendocument.formula .odf
    AddType application/vnd.oasis.opendocument.graphics .odg
    AddType application/vnd.oasis.opendocument.presentation .odp
    AddType application/vnd.oasis.opendocument.spreadsheet .ods
    AddType application/vnd.oasis.opendocument.text .odt
    AddType audio/ogg .ogg
    AddType application/pdf .pdf
    AddType image/png .png
    AddType application/vnd.ms-powerpoint .pot .pps .ppt .pptx
    AddType audio/x-realaudio .ra .ram
    AddType application/x-shockwave-flash .swf
    AddType application/x-tar .tar
    AddType image/tiff .tif .tiff
    AddType application/x-font-ttf .ttf .ttc
    AddType audio/wav .wav
    AddType audio/wma .wma
    AddType application/vnd.ms-write .wri
    AddType application/vnd.ms-excel .xla .xls .xlsx .xlt .xlw
    AddType application/zip .zip
</IfModule>
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css A31536000
    ExpiresByType application/x-javascript A31536000
    ExpiresByType text/x-component A31536000
    ExpiresByType text/html A3600
    ExpiresByType text/richtext A3600
    ExpiresByType image/svg+xml A3600
    ExpiresByType text/plain A3600
    ExpiresByType text/xsd A3600
    ExpiresByType text/xsl A3600
    ExpiresByType text/xml A3600
    ExpiresByType video/asf A31536000
    ExpiresByType video/avi A31536000
    ExpiresByType image/bmp A31536000
    ExpiresByType application/java A31536000
    ExpiresByType video/divx A31536000
    ExpiresByType application/msword A31536000
    ExpiresByType application/vnd.ms-fontobject A31536000
    ExpiresByType application/x-msdownload A31536000
    ExpiresByType image/gif A31536000
    ExpiresByType application/x-gzip A31536000
    ExpiresByType image/x-icon A31536000
    ExpiresByType image/jpeg A31536000
    ExpiresByType application/vnd.ms-access A31536000
    ExpiresByType audio/midi A31536000
    ExpiresByType video/quicktime A31536000
    ExpiresByType audio/mpeg A31536000
    ExpiresByType video/mp4 A31536000
    ExpiresByType video/mpeg A31536000
    ExpiresByType application/vnd.ms-project A31536000
    ExpiresByType application/x-font-otf A31536000
    ExpiresByType application/vnd.oasis.opendocument.database A31536000
    ExpiresByType application/vnd.oasis.opendocument.chart A31536000
    ExpiresByType application/vnd.oasis.opendocument.formula A31536000
    ExpiresByType application/vnd.oasis.opendocument.graphics A31536000
    ExpiresByType application/vnd.oasis.opendocument.presentation A31536000
    ExpiresByType application/vnd.oasis.opendocument.spreadsheet A31536000
    ExpiresByType application/vnd.oasis.opendocument.text A31536000
    ExpiresByType audio/ogg A31536000
    ExpiresByType application/pdf A31536000
    ExpiresByType image/png A31536000
    ExpiresByType application/vnd.ms-powerpoint A31536000
    ExpiresByType audio/x-realaudio A31536000
    ExpiresByType image/svg+xml A31536000
    ExpiresByType application/x-shockwave-flash A31536000
    ExpiresByType application/x-tar A31536000
    ExpiresByType image/tiff A31536000
    ExpiresByType application/x-font-ttf A31536000
    ExpiresByType audio/wav A31536000
    ExpiresByType audio/wma A31536000
    ExpiresByType application/vnd.ms-write A31536000
    ExpiresByType application/vnd.ms-excel A31536000
    ExpiresByType application/zip A31536000
</IfModule>
<IfModule mod_deflate.c>
    <IfModule mod_setenvif.c>
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        BrowserMatch ^Mozilla/4\.0[678] no-gzip
        BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
        BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
    </IfModule>
    <IfModule mod_headers.c>
        Header append Vary User-Agent env=!dont-vary
    </IfModule>
    <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE text/css application/x-javascript text/x-component text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon
    </IfModule>
</IfModule>
<FilesMatch "\.(css|js|htc|CSS|JS|HTC)$">
    <IfModule mod_headers.c>
        Header set Pragma "public"
        Header append Cache-Control "public, must-revalidate, proxy-revalidate"
    </IfModule>
    FileETag MTime Size
    <IfModule mod_headers.c>
         Header set X-Powered-By "W3 Total Cache/0.9.2.4"
    </IfModule>
</FilesMatch>
<FilesMatch "\.(html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|HTML|HTM|RTF|RTX|SVG|SVGZ|TXT|XSD|XSL|XML)$">
    <IfModule mod_headers.c>
        Header set Pragma "public"
        Header append Cache-Control "public, must-revalidate, proxy-revalidate"
    </IfModule>
    FileETag MTime Size
    <IfModule mod_headers.c>
         Header set X-Powered-By "W3 Total Cache/0.9.2.4"
    </IfModule>
</FilesMatch>
<FilesMatch "\.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip|ASF|ASX|WAX|WMV|WMX|AVI|BMP|CLASS|DIVX|DOC|DOCX|EOT|EXE|GIF|GZ|GZIP|ICO|JPG|JPEG|JPE|MDB|MID|MIDI|MOV|QT|MP3|M4A|MP4|M4V|MPEG|MPG|MPE|MPP|OTF|ODB|ODC|ODF|ODG|ODP|ODS|ODT|OGG|PDF|PNG|POT|PPS|PPT|PPTX|RA|RAM|SVG|SVGZ|SWF|TAR|TIF|TIFF|TTF|TTC|WAV|WMA|WRI|XLA|XLS|XLSX|XLT|XLW|ZIP)$">
    <IfModule mod_headers.c>
        Header set Pragma "public"
        Header append Cache-Control "public, must-revalidate, proxy-revalidate"
    </IfModule>
    FileETag MTime Size
    <IfModule mod_headers.c>
         Header set X-Powered-By "W3 Total Cache/0.9.2.4"
    </IfModule>
</FilesMatch>
# END W3TC Browser Cache
# BEGIN W3TC Page Cache core
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^(.*\/)?w3tc_rewrite_test$ $1?w3tc_rewrite_test=1 [L]
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteRule .* - [E=W3TC_ENC:_gzip]
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{QUERY_STRING} =""
    RewriteCond %{HTTP_HOST} =erik.landvall.se
    RewriteCond %{REQUEST_URI} \/$ [OR]
    RewriteCond %{REQUEST_URI} (sitemap(_index)?\.xml(\.gz)?|[a-z0-9_\-]+-sitemap([0-9]+)?\.xml(\.gz)?) [NC]
    RewriteCond %{REQUEST_URI} !(\/wp-admin\/|\/xmlrpc.php|\/wp-(app|cron|login|register|mail)\.php|\/feed\/|wp-.*\.php|index\.php) [NC,OR]
    RewriteCond %{REQUEST_URI} (wp-comments-popup\.php|wp-links-opml\.php|wp-locations\.php) [NC]
    RewriteCond %{HTTP_COOKIE} !(comment_author|wp-postpass) [NC]
    RewriteCond %{HTTP_USER_AGENT} !(W3\ Total\ Cache/0\.9\.2\.4) [NC]
    RewriteCond "%{DOCUMENT_ROOT}/wp-content/w3tc/pgcache/%{REQUEST_URI}/_index%{ENV:W3TC_UA}%{ENV:W3TC_REF}%{ENV:W3TC_SSL}.html%{ENV:W3TC_ENC}" -F
    RewriteRule .* "/wp-content/w3tc/pgcache/%{REQUEST_URI}/_index%{ENV:W3TC_UA}%{ENV:W3TC_REF}%{ENV:W3TC_SSL}.html%{ENV:W3TC_ENC}" [L]
    </IfModule>
    # END W3TC Page Cache core
    # 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
DirectoryIndex index.php index.html index.htm

外部リソース

外部サイトの質問に関する情報。

私のブログ

問題があり、問題が解決するまで表示できるページ. UX と SEO の理由から、Web ページの翻訳版からサブカテゴリを削除しました。

現時点では翻訳が完了していないため、内容が異なります。

wpml.org

2 年前に投稿された wplm.org で、私の問題を正確に説明しているトピックを見つけました。ansersを読んだのですが、残念ながら解決せずにスレッドが終了してしまいました。

http://wpml.org/forums/topic/error-on-subcategories/から引用

ワードプレスのサブカテゴリに問題があるようです。wordpress 2.92 を使用していますが、サブカテゴリに切り替えると 404 エラー ページが表示されます。しかし、メイン カテゴリに戻ると、投稿はメイン カテゴリに表示されます。この問題はメイン言語では発生せず、他の言語でのみ発生します。したがって、私がメイン言語にいるとき、投稿はサブカテゴリとメインカテゴリの下に表示されますが、他の言語では表示されず、メイン言語でのみ表示されます.

4

1 に答える 1

2

以下の更新を確認してください。

この問題の解決策は、Apache 構成にあります。パスを WordPress の index.php ファイルのパラメーターに変換する正規表現を変更する必要があります。

WordPress は、PHP で動作する非常に高レベルのシステムであり、それ自体も非常に高レベルのシステムです。サーバーに到達するため、WordPress は URL にアクセスできません。index.php ファイルのみがあり、リクエストを処理できるように、このファイルにリクエストを送信する必要があります。

これを可能にするために、サーバーがリクエストの処理方法を決定する前にリクエストを変更する Apache モジュールである mod_rewrite を使用します。

サーバーのエラー ログを確認してください。サーバーがアクセスしようとした実際のファイルが表示されます。また、.htaccessWordPress がフォルダに作成したファイルも確認してください。これらのファイルには、mod_rewrite が使用する正規表現が含まれています。

私はあなたのブログをチェックしましたが、あなたはすでにこの問題を解決しているようです。同じ問題を抱えている他の人が恩恵を受けることができるように、私はまだ書きたかった. 特に、2 年前の別の場所での別の投稿についてのあなたの言及が未解決であるのを見た後。

アップデート:

「ほぼ確実です...」と言ってよかったです:D(この回答へのコメントを参照)数年前に解決した状況とは少し違うようです。

WordPress コードをチェックし、いくつかの試行を行いました。/en/ が原因で WordPress が記事を見つけられないのではないかと最初は思っていましたが、それは間違いでした。URL から投稿を検索する WordPress のデフォルトの動作は、このような状況を一種の肯定的な副作用としてカバーしています。たとえば、プラグインや言語が/en/ないため、WordPress には何の意味もありません。

ブラウズしたいときはerik.landvall.se/en/、期待どおり404を返します。ただし、カテゴリ構造が asabc/cde/efg/で、記事が asmooでアクセスできる場合はabc/cde/efg/moo、リンクのカテゴリ部分を変更すると、WordPress は自動的に次の場所にリダイレクトしますabc/cde/efg/moo

en/abc/cde/efg/moo abc/efg/moo cde/efg/moo ...

すべて にリダイレクトしabc/cde/efg/mooます。あなたのブログで、あなたのプラグインをシーンに持ち込む en/ を除いて、同じ動作を見ました。プラグインが WordPress が元々行っていた方法とは異なる方法で URL 構造を処理したり、別の方法で元の動作を変更したりすることは明らかです。

約束どおり、プラグインのソースを確認したかったのです。しかし、ソースを見るために購入しなければならない製品であり、決して使用しないものを購入するつもりはないため、今は不可能であることがわかりました:)

「親カテゴリでは、投稿を表示して問題なく移動できます」とおっしゃっていたので。URLからサブカテゴリを削除することを考えました。これはかなり汚いハックです。ただし、プラグインを編集するよりはましです。

この醜い php ファイルをfix_lang_subcategory.phpルート フォルダに置きます。

<?php

function fix_lang_subcategory() {
    $p = trim($_SERVER['REDIRECT_URL'], '/');
    if (substr_count($p, '/') > 2) {
        $_SERVER['REQUEST_URI']='/'.substr($p, 0, strpos($p,'/',4)).'/'.substr($p, strrpos($p, '/')+1).'/'.($_SERVER['QUERY_STRING'] ? '?'.$_SERVER['QUERY_STRING'] : '');
    }
};
fix_lang_subcategory();
require_once('index.php');
?>

この後、WordPress の 404 ファイルが /fix_lang_subcategory.php に正常に表示されるはずです。動作する場合は、.htaccess ファイルを編集できます。

.htaccess ファイルの最後に、

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

次の行を追加します。

RewriteRule ^en/ /fix_lang_subcategory.php [L]

ここで行っていることは、元のソースに触れることなく数行の php を実行できるように、愚かな php ファイルのエントリ ポイントを wordpress の index.php から変更することです。これは、サイトの /en/ 部分でのみ機能します。残りは今と同じように機能します。私たちの php ファイルでは、サブカテゴリへのリンクが表示されているかどうかを確認し、存在する場合は、次のように REQUEST_URI を変更します (これは良いことではありません!)。

/en/maincategory/subcategory1/subcategory2/article/?anything_here_untouched

/en/maincategory/article/?anything_here_untouched

次に、WordPress を離れて、通常の作業を行います。

サブカテゴリを有効にしたときにプラグインの動作が異なる場合、/en/ の下のサブカテゴリのページのリダイレクトが発生する可能性があります。

より良い解決策:

別の言語にサブドメインを使用したくないと思っていました。しかし、「翻訳されたブログのバージョンをサブディレクトリ/サブドメインでホストできますか?」というメッセージが表示されました。あなたの質問へのコメントとあなたの返信では、サブディレクトリへの言及が誤解を引き起こしたようです。ML プラグインの Web サイトで見たように、フォルダーの代わりにサブドメインを使用すると、おそらくすべての問題を回避できます。

代わりに?http://erik.landvall.se/enを使用できます。http://en.erik.landvall.se/多分?

さらに良い解決策:

90% の確率で ML プラグインが原因であり、修正する必要があります。サポート チケットを開始することは、彼らが問題を認識し、他の人のためにそれを修正するのに役立つ場合があります。

于 2012-06-28T09:07:32.033 に答える