Замените подчеркивания косой чертой и удалите «.php» в .htaccess

#apache #.htaccess #mod-rewrite #url-rewriting

#apache #.htaccess #мод-переписать #url-переписывание

Вопрос:

Я уже несколько часов ищу в Интернете и Stackoverflow, и я просто не могу полностью решить свою проблему. Я уже понял это много лет назад, но потерял файл и больше не могу его восстановить. Поэтому я надеюсь на вашу помощь!

У меня есть HTML-URL, и я хочу имитировать папки, а также я хочу удалить расширение .html

 INPUT: domain.com/file.html
OUTPUT: domain.com/file/

INPUT: domain.com/folder1_folder2_file.html
OUTPUT: domain.com/folder1/folder2/file/
  

Я также не уверен в флагах в конце строки.

Пока не работает код:

 RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1 [R=301,L]
RewriteRule ^([^_]*)_(.*)$ $1/$2 [R=301,L]
RewriteRule ^([^_]*)?_([^_]*)?_(.*)$ $1/$2/$3 [R=301,L]
  

Спасибо за вашу помощь.

Комментарии:

1. Когда вы заходите domain.com/file/ в браузер сейчас, он открывается /file.html ?

2. Нет, он по-прежнему показывает страницу «Не найдена».

3. в этом случае вы также будете переписывать с /folder1/folder2/file/ на /folder1_folder2_file.html

Ответ №1:

Не могли бы вы попробовать следующее.

 RewriteEngine ON
RewriteCond %{REQUEST_URI} _
RewriteCond %{REQUEST_URI} .html/?$
RewriteCond %{THE_REQUEST} /([^_]*)_([^_]*)_([^.]*).htmls [NC]
RewriteRule ^(.*)$ /%1/%2/%3/ [R=301,NC,L]

RewriteCond %{REQUEST_URI} !_
RewriteCond %{REQUEST_URI} .html/?$
RewriteCond %{THE_REQUEST} /([^.]*).htmls [NC]
RewriteRule ^(.*)$ /%1/ [R=301,NC,L]
  

Тестирование с помощью команды curl:

 curl -IL "http://localhost:80/file.html"
HTTP/1.1 301 Moved Permanently
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1g PHP/7.4.11
Location: http://localhost/file/

curl -IL "http://localhost:80/folder1_folder2_file.html"
HTTP/1.1 301 Moved Permanently
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1g PHP/7.4.11
Location: http://localhost/folder1/folder2/file/
  

Комментарии:

1. Я попробовал первый фрагмент кода. Не работает. Ошибка 404. Я не уверен, что делать со вторым.

2. @Mel, не могли бы вы, пожалуйста, сообщить мне, если вы нажмете ссылку http://localhost:80/folder1_folder2_file.html (вы могли бы указать свое доменное имя), когда я использовал, он отлично работал для меня, дайте мне знать?

Ответ №2:

Наконец-то я сам это понял. Он переписывает URL-адреса с помощью нецифровых символов и тире.

Для всех, кому интересно:

 RewriteEngine On
RewriteRule ^/?([a-zA-Z-] )$ $1.html [N]
RewriteRule ^/?([a-zA-Z-] )/([a-zA-Z-] )/([a-zA-Z-] )$ $1_$2_$3.html [L]
  

Тем не менее, спасибо за ваши усилия =) @RavinderSingh13

Комментарии:

1. Привет, спасибо, что сообщили о своем рабочем решении, для моего решения вы получили какую-либо ошибку и т. Д.? У меня все работало нормально 🙂