Почему постоянные ссылки работают с /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 и испытывает трудности с настройкой красивых постоянных ссылок.
Вся соответствующая информация должна быть частью вашего ответа, особенно важно, чтобы ваш ответ не зависел от внешних ссылок, поскольку информация там может исчезнуть, и тогда ваш ответ станет более или менее бесполезным. Не могли бы вы добавить эту информацию в свой ответ — заранее спасибо.
Nicolai Grossherr
После добавления контента я нашел статью, в которой предлагалось удалить файл .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.)
butlerblog