Перенос типа с переноса в Wordpress: проблема перенаправления htaccess - PullRequest
1 голос
/ 18 декабря 2011

Я перевожу довольно большой (более 5000 сообщений) из Movable Type в WordPress.На этом этапе я застреваю, пытаясь обеспечить, чтобы старые URL-адреса постов не приводили к 404-м, как только мы запустили новый сайт.

Старый шаблон URL выглядит так:

http://domain.com/site/category/category/post_name.php

И я хотел бы перенаправить их на

http://domain.com/category/category/post_name/

Тем не менее, я пробовал и пробовал с перенаправлениями htaccess, и независимо от того, что яделать, это либо не удается, либо генерирует ошибку 500.Я подозреваю, что упускаю что-то глупое или, возможно, существуют противоречивые правила, и я надеюсь, что кто-то, кто знает htaccess лучше, чем я, может помочь мне на правильном пути.

Вот что яполучил прямо сейчас.Правило перенаправления / site / в корневой каталог работает просто отлично, но два других не имеют никакого эффекта, будь то отдельно или вместе.Я попробовал оба, чтобы увидеть, могу ли я перенаправить конкретный пост и сделать это вручную таким образом, но он все равно не будет работать.

RewriteEngine On

RewriteRule ^site/(.*) /$1 [NC]
RewriteRule ^site/resources/(.*).php$ /resources/$1 [NC]
RewriteRule ^site/resources/research/safe_urban_form_revisiting_the_relationship_b.php$ /resources/research/safe_urban_form_revisiting_the_relationship_b/ [NC]

# 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

Любая помощь будет чрезвычайно полезна!

Ответы [ 3 ]

1 голос
/ 20 декабря 2011

Поскольку вы сохраняете тот же домен, почему бы вам не забыть о написании правил перенаправления самостоятельно и использовать вместо этого плагин перенаправления? Вам будет намного легче определить правила перенаправления с помощью плагина. Это стратегия, которой я следую каждый раз, когда могу

1 голос
/ 19 декабря 2011

Похоже, вы можете использовать перенаправление примерно так:

# Redirect /site/any/path/file.php to /any/path/file/:
RewriteRule ^site/(.+)\.php$ $1/ [NC,R=301,L]

Кроме того, я бы поместил это как первое правило сразу после строки RewriteBase / в разделе Wordpress.

0 голосов
/ 19 декабря 2011

Причина, по которой ваши перенаправления не работают должным образом, заключается в том, что . является специальным символом в синтаксисе регулярных выражений - это означает «любой символ».Вам нужно экранировать любые специальные символы, такие как ., ^ и т. Д. С обратной косой чертой, например: \..

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # Redirect old URLs with ".php" in them.
    RewriteRule ^site/(.+)\.php$ $1/ [NC,R=301,L]

    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Я не уверен, действительно ли вы хотите RewriteRule ^site/(.*) /$1 [NC]Править там, или если это было просто тестирование.Если вы это сделаете, просто добавьте его после оператора RewriteBase /.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...