Загрузка содержимого index.php, которое находится за пределами папки блога для отдельной страницы

Я создаю блог как WordPress для моего статического веб-сайта PHP. Когда URL страницы блога изменяется на pretty permalink (example.com/blog/my-post-page), загружая содержимое (не перенаправляя на index.php, загрузка содержимого и URL-адрес будут выглядеть как http://example.com/blog/my-post-page) index.php (домашняя страница моего сайта), которая находится вне папки блога, а не single.php.

Когда permalink изменяется на default (example.com/blog/?p=123), он будет работать отлично.

Мне нужен URL как http://example.com/blog/my-post-page.

EDIT: - Я обновил постоянную ссылку на пользовательскую структуру как /index.php/%postname%/. Но теперь страницы сообщений отображаются с example.com/blog/index.php/my-post-page.

Я думаю, что проблема поднята с новой версией WordPress. (Версия 4.2.2). Любые решения для удаления index.php из URL?

Структура моего каталога: -

/                                          - Root
/blog                                      - Blog folder
/blog/wp-content/themes/mytheme/           - Theme folder
/blog/wp-content/themes/mytheme/single.php - Post Single page

/index.php                                 - Home page (Loading contents of this file)

Мой htaccess: -

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Когда я удаляю/переименую index.php в корневую папку, страница покажет не найденную ошибку.

Ответ 1

в htaccess вы можете написать любое выражение регулярного выражения для перезаписи URL-адреса в вашем случае

RewriteRule ^/blog/\(.+)$ /blog/index.php?postname=$1

эта строка означает, что если url начинается с /blog/, то после / будет передан /blog/index.php в качестве параметра postname. example.com/blog/my-post-page будет переписан как example.com/blog/index.php?postname=my-post-page

вы можете исключить что-либо из этого правила

например, исключить это: /blog/wp-content/themes/mytheme/ он будет выглядеть следующим образом:

RewriteRule ^(?!/(.+)/(.+)/(.+)/(.+))/blog/\(.+)$ /blog/index.php?postname=$1

Ответ 2

Он должен работать

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Ответ 3

Здесь нужно внести два изменения, измените permalink на /%postname%/.

и измените .htaccess на следующий

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /blog/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /blog/index.php [L]
</IfModule>