#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. Привет, спасибо, что сообщили о своем рабочем решении, для моего решения вы получили какую-либо ошибку и т. Д.? У меня все работало нормально 🙂