Назад | Перейти на главную страницу

Разрешение URL-адреса Apache - использовать html-файл как каталог

Я сменил провайдера веб-хостинга, и теперь у меня проблема с конфигурацией: в корне моего сайта у меня есть файл с именем beta.html. Конфигурация Apache на предыдущем веб-хосте будет обслуживать его содержимое даже при доступе как http://example.com/beta или http://example.com/beta/. Apache на новом веб-хосте рассматривает эти два случая как ошибку 404. Обратите внимание, что есть нет каталог с именем beta на том сайте.

Есть что-нибудь, что я могу сделать с .htaccess чтобы он обслуживал содержимое beta.html без перенаправления на стороне клиента?

включить MultiViews для Directory обсуждаемый.

<Directory /my/web/site>
    Options MultiViews # and your other options
</Directory>

Сначала я предполагаю, что у вашего старого хостинг-провайдера был Aapche's mod_speling включен, что позволяет Apache исправлять незначительные несоответствия регистров и / или орфографические ошибки перед отображением ошибки 404.

Лучше всего не включать его, потому что это может вызвать довольно много накладных расходов и не препятствует плохому веб-дизайну.

Для этого вы можете использовать mod_rewrite. В сети есть множество руководств.

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

Например см .: Перепишите расширения файлов .html с помощью htaccess Я не тестировал это, но видел, как люди использовали этот и аналогичные подходы.

Обратите внимание, что это повлияет на весь ваш сайт. Если вы просто хотите сделать один URL, добавьте RewriteCond поэтому фильтрация применяется только к этому URI.

# This tag ensures the rewrite module is loaded
<IfModule mod_rewrite.c>
  # enable the rewrite engine
  RewriteEngine On
  # Set your root directory
  RewriteBase /

  # remove the .html extension
  RewriteCond %{THE_REQUEST} ^GET\ (.*)\.html\ HTTP
  RewriteRule (.*)\.html$ $1 [R=301]

  # remove index and reference the directory
  RewriteRule (.*)/index$ $1/ [R=301]

  # remove trailing slash if not a directory
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} /$
  RewriteRule (.*)/ $1 [R=301]

  # forward request to html file, **but don't redirect (bot friendly)**
  RewriteCond %{REQUEST_FILENAME}.html -f
  RewriteCond %{REQUEST_URI} !/$
  RewriteRule (.*) $1\.html [L]
</IfModule>