Почему постоянные ссылки работают с /index.php/%postname%, но не работают просто с %postname%?
У меня проблема с постоянными ссылками WordPress. Когда я меняю ссылки на красивые ЧПУ, страницы выдают ошибку 404. Странно то, что когда я использую структуру /index.php/%postname%, ссылки на страницы работают нормально, но мне нужно избавиться от части index.php.
Я читала про внесение изменений в файл httpd.conf, но не могу найти этот файл нигде. Файл .htaccess правильный, насколько я могу судить, вот он:
# 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
Есть другие идеи?
Спасибо Эмма

У меня был правильный код в файле .htaccess
, но он полностью переопределялся в стандартном файле Ubuntu /etc/apache2/apache2.conf
. Я изменил запись для /
и /var/www
с AllowOverride None
на AllowOverride All
, перезапустил Apache, и теперь всё работает отлично.

Моя догадка в том, что модуль mod_rewrite
не включен. В зависимости от используемого сервера, включите mod_rewrite
.
Затем, если вы используете Linux, вручную отредактируйте файл /etc/apache2/sites-enabled/000-default
и измените параметр AllowOverride
с None
на All
(или там, где находится директория вашего сайта).
Здесь, в пунктах 3 и 4 должны быть решения для Windows.

Я работал над аналогичной проблемой со вчерашнего дня и наконец нашел решение.
1) Убедитесь, что у вашего файла .htaccess установлены права 666
2) Включите модуль mod_rewrite:
sudo a2enmod rewrite
3) Перезапустите apache:
sudo systemctl restart apache2
4) Установите AllowOverride All для публичной директории в файле /etc/apache2/apache2.conf
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
5) Снова перезапустите apache:
sudo systemctl restart apache2
6) Перейдите в админку WordPress и измените настройки постоянных ссылок (если у вас "Название записи", измените на "Обычные", или наоборот). Проверьте сайт.
7) Снова зайдите в админку и установите желаемые настройки постоянных ссылок.
8) Верните права файлу .htaccess обратно на 644
Это сработало в моем случае.

Вы случайно не используете Names.co.uk в качестве хостинг-провайдера?
Я столкнулся с той же проблемой, что и вы, и после пары часов поисков в Google выяснил, что они используют сервер Zeus — не Apache — и он не поддерживает функцию Mod_ReWrite. Это объясняет странные симптомы. (У меня не было файла .htaccess, но WordPress не выдавал ошибок при изменении настроек постоянных ссылок.)
У них есть обходное решение для Zeus, подробности здесь:
http://www.names.co.uk/support/hosting/linux_hosting/1119-wordpress_rewrite_script.html
Я понимаю, что с момента вашего оригинального поста прошло пару месяцев, и вы, вероятно, уже решили проблему, — но для тех, кто наткнётся на это в будущем, стоит проверить, использует ли ваш хостинг Zeus или другой не-Apache сервер.
Обновление: посмотрите код, который я опубликовал здесь в ответ на похожий вопрос

Я долго боролся с этой проблемой, и сегодня наконец решил её. Оказалось, что весь этот время у меня не был включён модуль mod_rewrite
. Информация по этой ссылке оказалась очень полезной.
Там объясняется всё: как проверить, включён ли mod_rewrite
, и если нет — как его включить. Надеюсь, эта информация будет полезна всем, кто новичок в WordPress и испытывает трудности с настройкой красивых постоянных ссылок.

Вся соответствующая информация должна быть частью вашего ответа, особенно важно, чтобы ваш ответ не зависел от внешних ссылок, поскольку информация там может исчезнуть, и тогда ваш ответ станет более или менее бесполезным. Не могли бы вы добавить эту информацию в свой ответ — заранее спасибо.

После добавления контента я нашел статью, в которой предлагалось удалить файл .htaccess, затем перейти в Настройки/постоянные ссылки и убрать index.php. В статье говорилось, что WordPress выдаст ошибку с предложением создать файл .htaccess. Я решил попробовать, но это не дало результата. Однако я обнаружил, что мои постоянные ссылки продолжали работать даже после удаления .htaccess. Сначала это меня озадачило. Я открыл FTP-клиент и перешел к своим файлам. Там я заметил, что файл .htaccess снова появился после его удаления. Не знаю, WordPress ли это, мой хостинг-аккаунт или что-то еще создало его, но я уверен, что это новое поведение. Раньше такого не происходило. Возможно, вам стоит попробовать этот метод, если другие способы не помогли.
Мне не удалось воспроизвести проблему, описанную в вашем вопросе, поэтому я не могу гарантировать, что это решение сработает для вас. Но попробовать стоит.
С уважением,
Джереми Джаред

Попробуйте заменить код в файле .htaccess на этот:
# -------------------------------------------------------------------------
# Настройки движка перезаписи
# -------------------------------------------------------------------------
RewriteEngine On
RewriteCompatibility2 On
RepeatLimit 200
RewriteBase
RewriteRule ^/index.php$ / [NC,P,R=301]
RewriteCond %{REQUEST_URI} !/wp-admin
RewriteRule ^/(.*)/$ /index.php/$1 [NC]
# Перенаправление с 'www.yourblogsite.com/anything/anything/index.php'
# на 'www.yourblogsite.com/anything/anything/'
RewriteRule ^/(.*)/index.php$ /$1/ [NC,P,R=301]
# -------------------------------------------------------------------------
# КОНЕЦ ПРАВИЛ ПЕРЕЗАПИСИ
# -------------------------------------------------------------------------
У меня еще остались учетные данные клиента, для которого мне пришлось это исправлять. Вот что я использовал для него. Это сервер IIS, не уверен, имеет ли это значение, но вы можете попробовать.
Удачи,
JJ

Я думаю, ваш хостинг использует IIS (Internet Information Services). В IIS применяется "URL Rewrite
", а не "mod_rewrite
", поэтому ознакомьтесь с Кодексом.
"Красивые" постоянные ссылки обычно требуют mod_rewrite, а IIS (часто используемый на серверах Windows) не поддерживает mod_rewrite. (Если вы используете Apache 2.0.54 на Windows, mod_rewrite может работать при условии, что он включен в файле apache\conf\httpd.conf.)

Я знаю, что уже слишком поздно отвечать, но если вы всё ещё ищете решение; вот быстрый способ:

У меня была такая же проблема на Mac OSX, и следующие ссылки оказались очень полезными. Похоже, что по умолчанию Mac не готовы к использованию .htaccess, и Apache будет игнорировать этот файл, пока не будут внесены определенные изменения в конфигурационные файлы (указанные в ссылках ниже):
http://wordpress.org/support/topic/getting-pretty-permalinks-working-on-a-mac-105-server
Надеюсь, это поможет!

Это для сервера Apache: Сначала проверьте ваш виртуальный хост. Если используете стандартный, убедитесь, что в корневой директории WordPress есть следующее:
<Directory ROOT_DIR_FOR_WORDPRESS>
php_admin_flag engine on
AllowOverride All
Order allow,deny
allow from all
RewriteEngine On
RewriteOptions Inherit
Require all granted
</Directory>
Проверьте, что файл .htaccess
в корне WordPress имеет права на чтение и запись (666)
и содержит следующее:
# 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
Включите модуль mod_rewrite
(для Linux: sudo a2enmod rewrite
).
Обновите постоянные ссылки:
Произвольная структура: /%postname%/
Сохраните изменения и проверьте на ошибки. Теперь всё должно работать.
Чаще всего проблема в том, что правила виртуального хоста переопределяют .htaccess
.

Добро пожаловать на WPSE. В вашем ответе стоит добавить больше деталей для тех, кто может не понимать, о чем идет речь. Больше деталей всегда лучше, иначе люди будут спрашивать: "Где найти sudo в админке WordPress?" (Также стоит указать другие нюансы, отметив, что это может работать не во всех случаях, поскольку a2enmod — это особенность Debian.)
