PHP RewriteRule в сочетании с кэшированием - PullRequest
0 голосов
/ 03 июня 2019

Моя проблема в том, что мой файл .htaccess в таком месте, как: test.example.com/, не перенаправляет.Я подозреваю, что это из-за правила кэширования в том же файле.Я думаю, что они могут помешать, однако, у меня нет опыта работы с файлами .htaccess, поэтому я могу ошибаться.Может ли кто-нибудь помочь мне перенаправить:

test.example.com/s/home

to:

test.example.com/?s=home

Пользователь должен ввести: test.example.com/s/home, а затем test.example.com/index.php должен иметь возможность $ _GET ["s "] без изменения URL-адреса в панели URL-адресов на фактический URL-адрес test.example.com/?s=home

Я пробовал много примеров, показанных в stackoverflow, но они не работали для меня.

<IfModule mod_headers.c>
Header set Cache-Control "max-age=0, private, no-cache, no-store, must-revalidate"
</IfModule>

RewriteEngine on
RewriteRule ^/s/$ /?s=$1

ЭТО НЕ РАБОТАЕТ !!!^

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 03 июня 2019

Для конкретной задачи , о которой вы спрашиваете, учитывая ваше дополнительное упоминание скрипта маршрутизации index.php, я предлагаю следующую отправную точку:

RewriteEngine on
RewriteRule ^/?s/(\w+)/?$ /index.php?s=$1 [END,QSA]

Возможно, вам придется настроить его дляВаша конкретная ситуация, хотя.

В случае, если вы получили внутреннюю ошибку сервера (http status 500), используя приведенное выше правило, есть вероятность, что вы используете очень старую версию apache http server.В этом случае вы увидите определенный намек на неподдерживаемый флаг [END] в файле журнала ошибок http-серверов.Вы можете попытаться обновить или использовать более старый флаг [L], он, вероятно, будет работать так же в этой ситуации, хотя это немного зависит от ваших настроек.

Это правило также будет работать в конфигурации хоста http-серверов или внутри файла динамической конфигурации (файл ".htaccess").Очевидно, что модуль перезаписи должен быть загружен внутри http-сервера и включен на хосте http.Если вы используете динамический файл конфигурации, вам нужно позаботиться о том, чтобы его интерпретация вообще была включена в конфигурации хоста и находилась в папке DOCUMENT_ROOT хоста.

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

...