Я сменил провайдера веб-хостинга, и теперь у меня проблема с конфигурацией: в корне моего сайта у меня есть файл с именем 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>