Назад | Перейти на главную страницу

Смешайте статические файлы в WordPress

Я переношу статичный сайт на WordPress 4.3.1. Большинство вещей работает нормально, но у меня есть один странный случай: мне нужно example.com/foo/ быть динамичным, но мне нужно example.com/foo/bar/ быть статичным. Я создал /foo/bar/index.html обрабатывать example.com/foo/bar/, но сейчас example.com/foo/ выдает 403 Запрещенный код.

Мне также нужно example.com/foo/bar/ для отображения в меню, чего я добился, добавив динамический example.com/foo/bar/ также (удаление этого не помогает).

В example.com/foo/ страница все еще существует и ее можно редактировать в админке. Почему я получаю ошибку 403 и как ее исправить?

Это происходит потому, что правила перезаписи WordPress Apache передают все на WordPress, который не существует как файл или каталог в файловой системе, это то, что два RewriteCond правила проверьте. Но ты делать иметь каталог, соответствующий /foo/ в файловой системе, заставляя Apache обрабатывать его внутренне.

Чтобы решить эту проблему, вам нужно явно указать Apache передать это WordPress (и сделать это с любыми другими URL-адресами, которые могут иметь каталоги, маскирующие их из первого правила перезаписи).

Добавьте новый раздел директив непосредственно перед концом IfModule:

RewriteCond %{REQUEST_URI} "/foo/" [OR]
RewriteCond %{REQUEST_URI} "/bar/" [OR]
RewriteCond %{REQUEST_URI} "/baz/"
RewriteRule . /index.php [L]

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

Мне пришлось изменить конфигурацию DirectoryIndex.

DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

Это мои / etc / workpresss / правила доступа для WordPress со смешанным статическим контентом.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # Content rewrites go here

    # Serve static content
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # Use WordPress for rest of the content
    RewriteRule . /index.php [L]
</IfModule>

Изменить: 403 - это сообщение о запрещенном доступе. Это может быть ACL в Apache или проблема с разрешениями в каталогах WordPress. Причина ошибки 403 может быть записана в журнал ошибок Apache.

Поскольку у вас есть изолированное дерево каталогов, вы должны иметь возможность использовать Location или Directory директива для статического кода. Это вариант того, что я использую.

<Location /foo/bar/>
    Options +Indexes +FollowSymLinks +MultiViews
    AllowOverride None
    Require all granted
</Location>