Перенаправить все запросы .php в .html с помощью .htaccess.

Следующий код работает, чтобы скрыть .php и заменить его на .html

RewriteEngine ON
RewriteCond %{REQUEST_URI} ^/([^/]*)/([^.]*)\.html/?$ [NC]
RewriteRule ^(.*)$ %1/%2/index.php [L]

Я хотел бы перенаправить все запросы .php на .html. Все файлы .php находятся внутри подкаталога в «https://www.sitename.com/user/». Например

https://www.sitename.com/user/login/index.php
https://www.sitename.com/user/name/index.php
https://www.sitename.com/user/register/index.php
https://www.sitename.com/user/logout/index.php
https://www.sitename.com/user/dashboard/index.php
https://www.sitename.com/user/contact/index.php

Он должен перенаправить на

https://www.sitename.com/user/login.html
https://www.sitename.com/user/name.html
https://www.sitename.com/user/register.html
https://www.sitename.com/user/logout.html
https://www.sitename.com/user/dashboard.html
https://www.sitename.com/user/contact.html

Добавление отдельной строки кода .htaccess для каждой папки будет затруднено, может ли кто-нибудь помочь с простым кодом для автоматического обнаружения и перенаправления .php в .html?

Объяснение: Если кто-то попытается получить доступ к «sitename.com/user/login/index.php», он должен загрузить «sitename.com/user/login.html».

Sitename.com/user/login.html должен быть единственным URL-адресом, видимым пользователям. Даже если кто-то попытается получить доступ к «sitename.com/user/login/index.php», он должен перенаправить/переписать на «sitename.com/user/login.html». Введите sitename.com/user/login.html в браузере = sitename.com/user/login.html Введите sitename.com/user/login/index.php в браузере = sitename.com/user/login.html

Вы путаете "переписать" и "перенаправить" :-) Хочешь что-то скрыть - хочешь переписать. ? в конце вашего регулярного выражения должен быть необязательным, я думаю?

Daniel W. 21.12.2020 09:51

@Daniel W, я хочу перенаправлять запросы, идущие в исходное местоположение скрипта, на поддельный URL-адрес (здесь с php на html).

Naveen Mp 21.12.2020 10:08

Что именно вы подразумеваете под «перенаправлением»? Что вы пытались сделать, чтобы это сработало?

Nico Haase 21.12.2020 10:11

@NaveenMp это не перенаправление. Это переписать.

Daniel W. 21.12.2020 10:22

Существует ли такой же файл с расширением .html?

Amit Verma 21.12.2020 10:28

@Nico Haase, исходный URL-адрес скрипта: «sitename.com/user/login/index.php», с помощью .htaccess переписать «sitename.com/user/login.html» также работает. Но все же «sitename.com/user/login/index.php» доступен. Я не хочу, чтобы файл .php загружался каким-либо образом. должен быть виден только короткий URL-адрес .html.

Naveen Mp 21.12.2020 10:40

@Amit Verma, URL-адрес .html не работает с использованием перезаписи .htaccess.

Naveen Mp 21.12.2020 10:41

Пожалуйста, добавьте все пояснения к своему вопросу, отредактировав его - если вы не хотите, чтобы index.php загружался каким-либо образом, вам не нужно перенаправление - если вы хотите, чтобы оно перенаправлялось на любой другой URL-адрес, почему бы не добавить правила перенаправления? Пожалуйста, объясните, что именно должно произойти, если кто-то спросит sitename.com/user/login/index.php

Nico Haase 21.12.2020 10:55

@Nico Haase, «sitename.com/user/login/index.php» — это исходный существующий файл, я не хочу, чтобы браузеры показывали точный путь. Всегда показывать поддельный путь с расширением .html. В настоящее время я могу использовать «sitename.com/user/login.html», но также загружается «sitename.com/user/login/index.php»! Я этого не хочу, только версия .html должна загружать страницы.

Naveen Mp 21.12.2020 10:58

Пожалуйста, добавьте все пояснения к вашему вопросу, отредактировав его, а также объясните, что именно должно произойти, если кто-то запросит этот «скрытый» URL-адрес, должен ли этот запрос быть перенаправлен на общедоступный URL-адрес, должен ли он отображать сообщение об ошибке?

Nico Haase 21.12.2020 11:02

@Nico Haase, обновленный вопрос. Я не знаю, как объяснить это более понятно. но, короче говоря, в браузере всегда должен отображаться только поддельный путь!

Naveen Mp 21.12.2020 11:28
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
3
11
557
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

С вашими показанными образцами, не могли бы вы попробовать следующее. Убедитесь, что вы очистили кеш браузера перед проверкой URL-адресов. В соответствии с правилами редактирования комментариев OP, в соответствии с форматами .php и .html. Я считаю, что вам следует избегать предоставления пользователям обоих типов URL-адресов и просить их нажимать только URL-адреса .html на случай, если кто-то нажмет URL-адрес .php, вы можете запретить его (в случае, если они напрямую нажимают на него, другой причиной может быть то, что если они нажимают .php напрямую, тогда вы хотите, чтобы он изменил URL-адрес в браузере на .html, который фактически обслуживается самим файлом .php в бэкэнде), если они попадут в .html, то это может быть обслужено соответствующим index.php переданного uri ИМХО. ПРИМЕЧАНИЕ. Это только ИМХО, и его не следует использовать, если у кого-то есть дополнительные требования к этому.

RewriteEngine ON
RewriteCond %{REQUEST_URI} ^/user/([\w-]+)\.html/?$ [NC]
RewriteRule ^(.*)$ user/%1/index.php [L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} index\.php/?$ [NC]
RewriteRule ^ - [F]

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат.

Samuel Liew 21.12.2020 16:10
Ответ принят как подходящий

Вы можете использовать следующие правила для преобразования ваших URL-адресов php в html:

RewriteEngine on

#Redirect and rewrite php URLs to html
#redirect /user/foobar/index.php to /user/foobar.html
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^user/([^/]+)/index\.php$ /user/$1.html [L,R]
#rewrite /user/foobar.html to /user/foobar/index.php
RewriteRule ^user/([^.]+)\.html$ /user/$1/index.php [L]

Правило № 1) срабатывает, когда запрашивается /user/foobar/index.php, и перенаправляет его на /user/foobar.html . Поскольку файл .html не существует, второе правило сопоставляет запрос .html обратно на исходную страницу .php, но ваш URL остается прежним в адресной строке браузера.

@SamuelLiew Могу ли я узнать, почему все комментарии, опубликованные в этом ответе, были удалены?

Amit Verma 22.12.2020 16:32

Другие вопросы по теме