WPML>子类别页面生成404 <WordPress

时间:2012-05-13 01:08:13

标签: wordpress wordpress-plugin multilingual permalinks

问题的简短描述

所以问题基本上是当我使用wpml在网站的翻译版本中使用子类别时,它会生成一个404页面。在父类别中,我仍然可以看到帖子并导航到它没有问题。而且,在没有翻译的版本中一切正常。

我的问题

所以我的问题是,如果有其他人遇到过这个问题,如果有的话,你是怎么解决的?


希望有用的信息

软件

  • PHP - 5.2
  • WordPress - 3.3.2
  • WPML多语种CMS - 2.4.3
  • WPML字符串翻译 - 1.3.0

永久链接设置

/%category%/%postname%/

我尝试了什么

  • 我尝试停用所有其他插件
  • 尝试刷新永久链接 <编辑

其他信息

  • 似乎子类别的网址被视为“网页” <编辑
  • 如果我们手动直接转到网址但从网址中减去父类别,我们会转到预期的类别存档页 <编辑
    示例http://domain.com/en/super/sub/ - &gt; http://domain.com/en/sub/
我的.htaccess -file:
# 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

外部资源

与外部网站上的问题相关的信息。

我的博客

我遇到问题的页面以及在我解决问题之前您可以查看的页面出于用户体验和搜索引擎优化的原因,我已从网页的翻译版本中删除了子类别。

此时翻译尚未完成,女巫是内容不同的原因。

wpml.org

我在2年前发布了一个关于wplm.org的话题,它完全描述了我的问题。不幸的是,我阅读了激光,但线程结束时没有得到解决。

  

引自http://wpml.org/forums/topic/error-on-subcategories/

     

在wordpress中似乎存在子类别问题。我正在使用   wordpress 2.92当我切换到子类别时,它会显示404   错误页面。但是当我这样做时,帖子确实出现在主要类别中   切换回来。这个问题不会出现在主要语言中,   只在其他语言中。所以当我在主要语言中时,   帖子出现在子类别和主要类别下,而不是在   其他语言,只出现在主要语言中。

1 个答案:

答案 0 :(得分:2)

请检查以下更新。

此问题的解决方案在您的Apache配置中。您需要更改将路径转换为WordPress的index.php文件参数的正则表达式。

WordPress是一个非常高级的PHP系统,它本身也是一个非常高级的系统。 WordPress在访问服务器时无法访问网址。它只有index.php文件,它需要来到这个文件的请求才能处理请求。

为了实现这一点,他们使用mod_rewrite,一个Apache模块,在服务器决定如何处理请求之前修改请求。

请检查服务器的错误日志。您将看到服务器尝试访问的真实文件。另外,请检查在文件夹中创建的.htaccess个WordPress文件。在这些文件中,您将看到mod_rewrite使用的正则表达式。

我检查了你的博客,看起来你已经解决了这个问题。我仍然想写,所以其他人有同样的问题可以受益。特别是在两年前你在其他地方提到另一篇文章后,你还没有解决。

<强>更新

我很高兴我说过“我几乎肯定......”:D(指的是对这个答案的评论)看起来事情和我解决的情况有点不同几年前。

我检查了WordPress代码并做了一些试验。我原本以为WordPress找不到文章因为/ en /但是我错了。 WordPress从网址中查找帖子的默认行为将这种情况视为一种积极的副作用:假设我没有任何插件或任何语言,因此/en/对WordPress毫无意义。

当我想要浏览erik.landvall.se/en/时,它会按预期返回404。但是,如果我们的类别结构为abc/cde/efg/,而文章为moo,可以在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结构,或者以另一种方式改变原始行为。

我想按照我的承诺检查插件来源;但是我看到现在对我来说是不可能的,因为它是我必须购买的产品才能看到来源而且我不愿意购买我永远不会使用的东西:)

因为您说“在父类别中我仍然可以看到帖子并导航到它而没有任何问题。”我想从网址中删除子类别。这是一个非常肮脏的黑客;但比编辑插件要好。

我们把这个丑陋的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');
?>

在此之后,您应该成功地在/fix_lang_subcategory.php上看到WordPress的404文件。如果有效,我们可以编辑.htaccess文件。

在.htaccess文件的末尾,

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

行,我们添加以下行:

RewriteRule ^en/ /fix_lang_subcategory.php [L]

我们在这里做的是我们用wordpress的index.php中的愚蠢php文件更改入口点,以便能够在不触及原始源的情况下运行几行php。这仅适用于站点的/ en /部分。休息像现在一样工作。在我们的php文件中,我们检查是否看到了与子类别的链接,如果有,我们改变(这不是一件好事!)REQUEST_URI如下:

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

/en/maincategory/article/?anything_here_untouched

然后我们让WordPress正常工作。

如果启用子类别时插件的工作方式不同,那么这可能会导致/ en /.下重新定向子类别页面。

更好的解决方案:

我以为你不想使用子域名替代语言;但后来我看到“你能在子目录/子域中托管翻译博客的版本吗?”对你的问题和你的回复的评论,看起来像提到子目录引起了误解。正如我在ML插件的网站上看到的那样,你可以使用一个子域而不是一个文件夹来避免所有的麻烦,可能是:

您可以使用http://erik.landvall.se/en代替http://en.erik.landvall.se/吗?可能?

更好的解决方案:

ML Plugin造成这种情况的机会有90%,他们必须解决这个问题。启动支持服务单可能有助于他们实现问题并为其他人解决问题。