Как получить .htaccess псевдостати c + скрытое расширение? - PullRequest
0 голосов
/ 22 марта 2020

Почему я не могу использовать следующее?

RewriteRule ^(.*)$ $1.html [L]

.htaccess file:

RewriteRule ^(.*)$ index.php [L]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ $1.html [L]

1 Ответ

0 голосов
/ 22 марта 2020
RewriteRule ^(.*)$ index.php [L]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ $1.html [L]

Первое правило переписывает все в index.php. Следующие директивы эффективно игнорируются.

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

Похоже, что вы хотите сделать:

  1. Добавить расширение .html к URL-адресам, которые будут сопоставлены с .html файлами.
  2. Переписать все другие запросы, которые (я предполагаю) не сопоставляются с физическими файлами и каталогами, с index.php.

Дополнительные предположения

  • .htaccess файл находится в документе root.
  • Запрошенные URL-адреса, которые должны соответствовать .html файлам, не содержат точек в URL-пути. Таким образом, точки в URL-пути указывают только на расширение файла.
  • Если вы буквально переписываете все остальное на index.php (как вы делали), то оно также переписывает все ваши данные c ресурсов (CSS, JS, изображения и т. Д. c.), Поэтому я предполагаю, что вы хотите сделать исключения для статических c ресурсов и всего, что в противном случае сопоставлялось бы с файлом или каталогом.

Попробуйте вместо этого:

RewriteEngine On

# Append the ".html" extension if the target file exists
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^([^.])$ $1.html [L]

# Rewrite other requests that don't map to files/directories to index.php
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule !\.(?:css|js|jpg|png|gif)$ index.php [L]
...