Как игнорировать каталоги с тем же именем, что и файл, при скрытии расширений

У меня есть каталог и файл с тем же именем, например:

foo.html

фу/

Мой файл .htaccess настроен так, чтобы скрывать расширения файлов в адресной строке, поэтому, когда я запрашиваю www.example.com/foo, он должен отображать файл foo.html. Однако, поскольку существует каталог с таким же именем, файл foo.html не отображается, а вместо этого отображается каталог, например www.examplecom/foo/.

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

Мой файл .htaccess:

RewriteEngine On
DirectorySlash Off

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]

Запуск сервера Apache/2.4.7 (Ubuntu)


person Bitcoin Barron    schedule 13.07.2014    source источник


Ответы (1)


Замените правило на:

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/$1\.html -f [NC]
RewriteRule ^(.+?)/?$ /$1.html [L]

Вам также не нужна строка DirectorySlash Off.

person anubhava    schedule 13.07.2014
comment
Мне нравится то, что вы сделали в RewriteCond — мастерский синтаксис, +1 :) - person zx81; 13.07.2014
comment
Спасибо за ответ, я сделал, как вы сказали, но, к сожалению, я получаю те же результаты, на самом деле теперь ни один из моих URL-адресов не работает, возможно, где-то есть небольшая ошибка? - person Bitcoin Barron; 13.07.2014
comment
В этих правилах нет ошибок, но другие правила могут конфликтовать. Можете ли вы опубликовать свой полный .htaccess в своем вопросе, чтобы я мог исследовать. - person anubhava; 13.07.2014
comment
На самом деле я просто использую свой файл apache2.conf вместо .htaccess <Directory /var/www/> Options FollowSymLinks AllowOverride None Require all granted RewriteEngine On RewriteCond %{DOCUMENT_ROOT}/$1\.html -f [NC] RewriteRule ^(.+?)/?$ /$1.html [L] </Directory> - person Bitcoin Barron; 13.07.2014
comment
Для тестирования поместите это правило в свой DocumentRoot/.htaccess вместо конфигурации Apache. Возможно, вам потребуется включить .htaccess, если он еще не включен. - person anubhava; 13.07.2014