Почему постоянные ссылки работают с /index.php/%postname%, но не работают просто с %postname%?

12 июл. 2011 г., 14:33:21
Просмотры: 28.5K
Голосов: 7

У меня проблема с постоянными ссылками 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

Есть другие идеи?

Спасибо Эмма

9
Комментарии

какой у тебя хостинг?

Bainternet Bainternet
12 июл. 2011 г. 14:41:26

Эй, это местная компания, у них сервер прямо в магазине. У них очень простая веб-панель!

emmahiggy emmahiggy
12 июл. 2011 г. 15:20:52

Может, проверь права доступа к файлу .htaccess. Может, WP не может до него добраться?

Cristian Cristian
12 июл. 2011 г. 15:38:34

У меня установлены права доступа 644 для файла htaccess, пермалинк меняется, но страницы не обновляются вместе с ним, поэтому я получаю ошибки 404 при правильном пермалинке.

emmahiggy emmahiggy
12 июл. 2011 г. 17:28:01

Какое точное значение установлено для пермалинков?

Alex Older Alex Older
12 июл. 2011 г. 17:39:19

Это пользовательская структура /index.php/%postname%

emmahiggy emmahiggy
12 июл. 2011 г. 18:33:36

Этот сайт размещен на Linux сервере? У меня была такая же проблема на сайте клиента, но там был Windows сервер.

Jeremy Jared Jeremy Jared
12 июл. 2011 г. 21:37:14

Это Windows сервер, я попробую ваше решение ниже и сообщу о результатах. Большое спасибо.

emmahiggy emmahiggy
13 июл. 2011 г. 17:11:19

Боже, не могу поверить, что эта ошибка все еще появляется в 2021 году

Bharat Bharat
1 янв. 2021 г. 22:48:37
Показать остальные 4 комментариев
Все ответы на вопрос 13
2
12

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

29 апр. 2015 г. 21:35:38
Комментарии

Это сработало!! Спасибо

Bharat Bharat
1 янв. 2021 г. 22:48:51

Блестяще, это сработало. Это нужно где-то обновить в документации

Jonathan S. Fisher Jonathan S. Fisher
1 сент. 2021 г. 20:40:20
0

Моя догадка в том, что модуль mod_rewrite не включен. В зависимости от используемого сервера, включите mod_rewrite.

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

Здесь, в пунктах 3 и 4 должны быть решения для Windows.

13 июл. 2011 г. 23:56:04
0

Я работал над аналогичной проблемой со вчерашнего дня и наконец нашел решение.

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

Это сработало в моем случае.

26 мар. 2019 г. 06:21:46
0

Вы случайно не используете 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 сервер.

Обновление: посмотрите код, который я опубликовал здесь в ответ на похожий вопрос

20 сент. 2012 г. 04:26:13
1

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

8 янв. 2016 г. 14:05:33
Комментарии

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

Nicolai Grossherr Nicolai Grossherr
8 янв. 2016 г. 15:46:06
0

Попробуйте установить права 777 для файла htaccess, затем перейдите в настройки постоянных ссылок и обновите их на желаемые. Если это сработает, верните права обратно на 644.

12 июл. 2011 г. 21:30:29
1

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

Мне не удалось воспроизвести проблему, описанную в вашем вопросе, поэтому я не могу гарантировать, что это решение сработает для вас. Но попробовать стоит.

С уважением,
Джереми Джаред

12 июл. 2011 г. 21:47:53
Комментарии

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

emmahiggy emmahiggy
13 июл. 2011 г. 18:18:07
0

Попробуйте заменить код в файле .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

13 июл. 2011 г. 18:43:50
0

Я думаю, ваш хостинг использует 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.)

20 нояб. 2012 г. 23:42:05
2

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

Решено - Как удалить index.php из URL WordPress на IIS7?

10 мар. 2013 г. 15:05:08
Комментарии

Пожалуйста, добавьте решение к вашему ответу, если ссылка умрёт, это больше не будет полезным.

brasofilo brasofilo
10 мар. 2013 г. 16:34:21

@brasofilo Боже мой...! Ссылка умерла! ;)

Sunny R Gupta Sunny R Gupta
15 окт. 2014 г. 17:24:48
0

У меня была такая же проблема на Mac OSX, и следующие ссылки оказались очень полезными. Похоже, что по умолчанию Mac не готовы к использованию .htaccess, и Apache будет игнорировать этот файл, пока не будут внесены определенные изменения в конфигурационные файлы (указанные в ссылках ниже):

http://wordpress.org/support/topic/getting-pretty-permalinks-working-on-a-mac-105-server

http://clagnut.com/blog/350/

Надеюсь, это поможет!

14 мар. 2013 г. 07:26:47
0

Это для сервера 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.

22 июл. 2016 г. 08:16:29
1

Вам необходимо выполнить команду sudo a2enmod rewrite для включения модуля rewrite

20 февр. 2019 г. 18:59:59
Комментарии

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

butlerblog butlerblog
20 февр. 2019 г. 19:45:00