On
DirectorySlash Off
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !/index\.php$
RewriteRule ^\/?([a-zA-Z0-9_.-]+)\/?$ /index.php?page=$1 [L]
Почему при обращении к странице
1) https://domain.com - Срабатывает https://domain.com/index.php?page=$1 1 раз. (но страница загружается как index.php без GET параметров)
2) https://domain.com/page1 - Срабатывает https://domain.com/index.php?page=$1 2 раза.
Пришёл к такому выводу так как на странице есть счётчик и он при разовой загрузке увеличивается в первом варианте на 1(хотя не должен вообще увеличиваться). Во втором варианте на 2(а должен на 1) Что происходит не могу понять.
Задача такая:
Всё что будет отображаться после "https://domain.com/" в соответствии ([a-zA-Z0-9_.-]+)
должно вызывать "https://domain.com/index.php?page=(здесь то что нашло регулярное выражение)"
Примечание: не важно есть ли такой каталог или файл. всё равно вызываем https://domain.com/index.php?page=(здесь то что нашло регулярное выражение) кроме имени файла index.php
Это вообще возможно реализовать? Подскажите если у кого есть идеи.
может тебе лучше роутинг сделать
RewriteRule ^\/?([a-zA-Z0-9_.-]+)\/?$ /index.php?page=$1 [L] ^\/?([a-zA-Z0-9_.-]+)\/?$ может сделать маску попроще? Зачем заморачиваться, пусть всё захватывает — ^(.*)$ ...?page=$1 [L] Вроде нужен ещё флаг QSA: [L,QSA] «[QSA] Querry string append - добавляет исходные параметры запроса (query string) к замене. Если замена не включает в себя новые параметры запроса, то исходные параметры запроса добавляются автоматически. Если же включает, то без флага QSA исходные параметры запроса будут утеряны.» ...?page=$1 ... Обычно перекидывают просто на index.php, там url будет доступен видимо, как $_SERVER['REQUEST_URI']. Например https://github.com/laravel/laravel/blob/d53539/public/.htaccess
Обсуждают сегодня