Я переношу статичный сайт на 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>