Загрузка содержимого 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>