所以问题基本上是当我使用wpml在网站的翻译版本中使用子类别时,它会生成一个404页面。在父类别中,我仍然可以看到帖子并导航到它没有问题。而且,在没有翻译的版本中一切正常。
所以我的问题是,如果有其他人遇到过这个问题,如果有的话,你是怎么解决的?
/%category%/%postname%/
http://domain.com/en/super/sub/
- > http://domain.com/en/sub/
# 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
与外部网站上的问题相关的信息。
我遇到问题的页面以及在我解决问题之前您可以查看的页面。 出于用户体验和搜索引擎优化的原因,我已从网页的翻译版本中删除了子类别。
此时翻译尚未完成,女巫是内容不同的原因。
我在2年前发布了一个关于wplm.org的话题,它完全描述了我的问题。不幸的是,我阅读了激光,但线程结束时没有得到解决。
引自http://wpml.org/forums/topic/error-on-subcategories/
在wordpress中似乎存在子类别问题。我正在使用 wordpress 2.92当我切换到子类别时,它会显示404 错误页面。但是当我这样做时,帖子确实出现在主要类别中 切换回来。这个问题不会出现在主要语言中, 只在其他语言中。所以当我在主要语言中时, 帖子出现在子类别和主要类别下,而不是在 其他语言,只出现在主要语言中。
答案 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%,他们必须解决这个问题。启动支持服务单可能有助于他们实现问题并为其他人解决问题。