Как конвертировать определенный htaccess в глобальный httpd.conf - PullRequest
0 голосов
/ 20 октября 2019

Как я могу преобразовать

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

в глобальную конфигурацию httpd.conf. Одной из непосредственных проблем является то, что в httpd.conf не разрешено правило RewriteBase. Но знать, как переписать это, может помочь понять, что делают эти правила.

Что делает RewriteBase /? Означает ли это, что он возьмет любой входящий URL и удалит все между именем сервера и последним элементом в URL и удалит его? То есть http://example.com/dir1/dir2/file становится http://example.com/file? Я думаю, что второе правило означает, что URL, такой как http://example.com/index.php, остается без изменений.

Третья и четвертая строки проверяются, чтобы увидетьесли запрашиваемое имя файла существует в виде файла или каталога, и если они существуют, то следующее правило перезаписи игнорируется.

В последней строке правило перезаписи сбивает с толку, похоже, оно должно соответствовать любому отдельному символу ипросто один символ (почему это не ^ (. *) $) и если это как-то совпадает, то перепишите всю строку как /index.php, который, кажется, каким-то образом знает, как обрабатывать URL http://example.com/index.phpпоскольку он по-прежнему содержит то, что было первоначально отправлено.

1 Ответ

0 голосов
/ 21 октября 2019

RewriteBase : вы можете иметь RewriteBase в httpd.conf. Прямо под блоком <Directory>. Посмотрите документацию, есть пример.

Здесь это было внутри файла .htaccess где-то в структуре каталогов. Он заставляет механизм перезаписи запускаться с /, а не из каталога, в котором находится файл .htaccess.


Вторая строка : вы правы, если это такне существующий файл.


Третья и четвертая строка : вы правы, если это не существующий каталог.


Последнийстрока : если запрос не является существующим файлом и не является существующим каталогом и имеет длину 1 символ ==> независимо от того, какой символ (соответствует.), возвращает index.php.

Я согласен с вами, это должно быть ^(.*)$, чтобы соответствовать чему-либо, что не является существующим каталогом файла. Только одна точка довольно ограничительна, хотя на вашем конкретном сайте может быть логика.


Подробности для .

  • .: совпадениялюбой символ
  • .+: соответствует 1 или более. Таким образом, любое количество символов, НЕ включая 0 символов.
  • .*: соответствует 0 или более. Так что любое количество символов, включая 0 символов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...