.htaccess, как загрузить переписанную страницу вместо перенаправления. - PullRequest
1 голос
/ 12 марта 2020

У меня есть чистый HTML / CSS / PHP блог. Структура проста. На главной странице находятся domain.com/blog (последние сообщения) и domain.com/blog?page=2 (для сообщений на странице 2 и т. Д. c). Эта страница находится в ведении блога. php файл. Если пользователь хочет прочитать сообщение, например "How-to-learn-poli sh", он переходит на domain.com/blog_post?name=How-to-learn-polish, и это тоже работает.

Моя проблема в том, как написать правило в htaccess для загрузки содержимого страницы domain.com/blog_post?name=How-to-learn-polish в URL domain.com/blog/How-to-learn-polish

Я искал в inte rnet решение своей проблемы, и я создал это правило

RewriteEngine On
RewriteRule ^blog/([^/]*)$ blog_post.php?name=$1 [L,NC]

Это правило работает нормально на 80%, потому что оно перенаправляет с domain.com/blog/How-to-learn-polish на domain.com/blog_post?name=How-to-learn-polish

Я не хочу перенаправлять, но загружаю сообщение в этом URL domain.com/blog/How-to-learn-polish

Что я должен изменить в своем htaccess, чтобы сделать это? Полный мой htaccess выглядит так

Header set Cache-Control "max-age=31536000, public"

RewriteEngine On
RewriteRule ^blog/([^/]*)$ blog_post.php?name=$1 [L,NC]

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

RewriteBase /
RewriteRule ^(.+)\.php$ /$1 [R,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [NC,END]

1 Ответ

1 голос
/ 12 марта 2020

Вам необходимо изменить порядок правил:

Header set Cache-Control "max-age=31536000, public"

RewriteEngine On

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301,NE]

RewriteRule ^(.+)\.php$ /$1 [R=301,NC,L]

RewriteRule ^blog/([^/]+)/?$ blog_post.php?name=$1 [END,NC,QSA]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [END]

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

...