Htaccess RewriteEngine интерпретация URL

В последнее время я изменил способ работы своего веб-сайта - физическая страница для каждой статьи по сравнению с динамически загружаемым контентом без физической (под) страницы, но я понял, что не могу просто загрузить файлы нового сайта, потому что я бы разбил все ссылки для обмена социальной платформой, счетчики и прочее, так как подстраниц буквально тысячи.

Я слышал (я знаю об этом), что с помощью .htaccess и RewriteEngine (мне нужно использовать RewriteEngine, поскольку весь код в htaccess создан для него) я могу заставить страницы загружаться изнутри чем-то совершенно другим в зависимости от фактического URL-адреса, например, если у меня есть действительная URL-ссылка на одну из моих подстраниц:

http://sub.mypage.com/php/somearticle.php?j=en

... поэтому без изменения текста URL-адреса он будет загружать файлы моего нового сайта внутри по другому принципу, например:

http://sub.mypage.com/?s=somearticle&j=en

Теперь мне также нужно, чтобы эти переменные «j» и «somearticle» были динамическими, или, точнее говоря, они должны быть скопированы точно так же, как они из физического URL-адреса в адресной строке (где «somearticle» на самом деле является именем изначально физического php, а "j" - это просто языковая переменная), так как каждый раз это будет что-то другое, поэтому мне не нужно делать тысячи строк в htaccess для каждой отдельной подстраницы - Мне нужен универсальный код, который бы управлял всеми подстраницами (поскольку принцип одинаков для всех, просто меняются имена php и иногда language = variable "j"), понимаете?

Так может ли кто-нибудь помочь мне рассказать мне точный синтаксис / код для этого?

РЕДАКТИРОВАТЬ

Так что я сам немного поигрался с этим, и, похоже, это сработает, если я установлю подстраницу вручную (ПРИМЕЧАНИЕ: просто пояснение - это для моего локального хоста: 8081, поэтому у меня есть это первое условие, потому что для сервера у меня другая версия, которая имеет другой путь к index.php) + Я немного обновил переменную j part thanx в сообщении @Ben:

# LOAD PAGE DIFFERENT INTERNALLY - LOCALHOST
RewriteCond %{HTTP_HOST} ^localhost:8081 [NC]
RewriteCond %{REQUEST_URI} /php/(.*)\.php$ [NC]
RewriteRule ^php/(.*).php$ /WWW/_PHP_/lego/index.php?s=$1 [QSA,L]

Но, к сожалению, по какой-то причине это влияет на каждую страницу моего сайта, а не только на страницы в / php /, поэтому, когда я нажимаю, чтобы перейти на свою первую страницу (default / initial = index.php), она ломается (она содержит сводку всех статей - они не загружены) - кто-нибудь знает, почему, пожалуйста?

Решено

Итак, после небольшого изменения кода @Ben это правильное решение, поэтому я считаю его решение правильным (поскольку оно действительно будет работать нормально сразу, как если бы страница была на сервере, потому что моя тестовая версия находится на моем локальном хосте, где путь к каталогу / php / другой))

LOAD PAGE DIFFERENT INTERNALLY - localhost
RewriteCond %{HTTP_HOST} ^localhost:8081 [NC]
RewriteCond %{REQUEST_URI} /php/([a-zA-Z0-9\-]+).php [NC]
RewriteRule ^ index.php?s=%1 [QSA,L]
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

REQUEST_URI - это компонент пути запрошенного URI, например /php/somearticle.php, но не содержит строку запроса, например ?j=en.

Шаблон RewriteCond, символ ! (восклицательный знак) используется для отрицания результата условия. Для префикса с каким-либо шаблоном используйте символ ^ (каретка), соответствующий началу строки.

%1 - это обратная ссылка RewriteCond, которая обеспечивает доступ к сгруппированным частям (в скобках) шаблона.

QSA, если заменяющий URI содержит строку запроса, строка запроса, такая как ?j=en, будет добавлена ​​к новому перезаписываемому uri.

RewriteCond %{REQUEST_URI} ^/php/([a-zA-Z0-9\-]+).php [NC]
RewriteRule ^ index.php?s=%1 [QSA,L]

См. Также: Модуль Apache mod_rewrite, Флаги RewriteRule

Спасибо за ваш ответ, но ваше решение не работает (+ оно не учитывает переменную учетной записи, которая поставляется с исходным URL-адресом = переменная j), тогда как мое обновленное решение в исходном сообщении (РЕДАКТИРОВАТЬ - вы заметили?) Работает точно так, как ожидалось, НО К сожалению, он просто ломает мой INDEX.PHP, поэтому мне нужно найти причину, по которой ... вы можете мне помочь с этим, пожалуйста? По какой-то причине кажется, что это также относится к index.php, чего, конечно же, не должно быть (это должно применяться только к URL-адресу, который заканчивается на "/php/somearticle.php") ... :-(

errerr 06.04.2018 16:45

Хорошо, Бен, я перепроверил ваше решение и с одним небольшим изменением - удалил знак ^, так как мое размещение www на локальном хосте отличается и с точки зрения локального сервера путь / php / не находится в корне - на самом деле он работает отлично, поэтому Я считаю ваше решение правильным, большое спасибо!

errerr 06.04.2018 17:46

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