Тази статия е продължение на статията Приложна магия с mod_rewrite в htaccess и отговаря на въпрос зададен като коментар: „очаквам след като изпиша примерно: http://www.domain.com/za_nas.html – в полето за адреси да се вижда само http://www.domain.com/za_nas„.
Тъй като решението не е много лесно, защото има подслучаи, написах отговора като отделна статия.
Задача за премахване на html разширение на уеб страница в адресната лента на браузъра
Скриване на разширението на файла.html. Когато в браузъра се напише http://domain/page.html да се отваря html страницата, но в адреса да се замества с http://domain/page
Специални изисквания за заместване
Ако в една и съща директория има файл /page.html и поддиректория /page/, то потребителя трябва да получава файла, когато напише /page и директорията, когато напише /page/.
Ако в директорията има файл /page.html и /page.pdf (или някакъв друг различен от html), то потребителя трябва да получава /page.html, когато напише /page.
Примери за поведение на пренаписващия скрипт
Използва се следния формат: написва -> зарежда се -> вижда в адресната лента на браузъра
http://domain.com/page.html -> http://domain.com/page.html -> http://domain.com/page
http://domain.com/index -> http://domain.com/index.html -> http://domain.com/
http://domain.com/index.html -> http://domain.com/index.html -> http://domain.com/
http://domain.com/index.txt -> http://domain.com/index.txt -> http://domain.com/index.txt
Ако в главната уеб директория има поддиректория /doc и файл /doc.html, а в директорията doc има два файла err.html и index.html
http://domain.com/doc.html -> http://domain.com/doc.html -> http://domain.com/doc
http://domain.com/doc -> http://domain.com/doc.html -> http://domain.com/doc
http://domain.com/doc/ -> http://domain.com/doc/index.html -> http://domain.com/doc/
http://domain.com/doc/err -> http://domain.com/doc/err.html -> http://domain.com/doc/err
http://domain.com/doc/err.html -> http://domain.com/doc/err.html -> http://domain.com/doc/err
Ако в поддиректорията /doc няма index.html, то при написване на http://domain.com/doc/ ще получи грешка Forbidden.
Решение
Следва кода за файла .htaccess любезно написан, тестван и предоставен за безплатно ползване от ganbox.com
# Спира MultiViews (за да може /abc да го търси като /abc.ext преди /abc/)
Options +FollowSymLinks -MultiViews
DirectoryIndex index.html
# Спира mod_dir, за да не добавя наклонена черта в края.
DirectorySlash Off
RewriteEngine On
# Ако търси /index или /index.html
RewriteCond %{THE_REQUEST} \ /(.+/)?index(\.html)?(\?.*)?\ [NC]
# го изтрива и оставя само /
RewriteRule ^(.+/)?index(\.html)?$ /%1 [R=301,L]
# Добавя наклонена черта в края на директория, ако няма файл с .html
# Ако търси директория
RewriteCond %{SCRIPT_FILENAME}/ -d
# и няма html файл с такова име
RewriteCond %{SCRIPT_FILENAME}.html !-f
# и няма наклонена черта, я добавя.
RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L]
# Изтрива HTML разширения
# Ако това е заявка от браузър (а не от Apache/mod_rewrite)
RewriteCond %{ENV:REDIRECT_STATUS} ^$
# и заявката има HTML разширение, го изтрива.
RewriteRule ^(.+)\.html$ /$1 [R=301,L]
# Ако в заявката има .html разширение
RewriteCond %{SCRIPT_FILENAME}.html -f
# и няма наклонена черта, добавя .html
RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L]
Брой разглеждания на тази статия: 4721
Сподели статията в
Бутончета на сайтове, в които можете да споделите линк към тази страница.
Подобни статии:
- Приложна магия с mod_rewrite в htaccess Пренаписване на интернет адреси с .htaccess Промяната на интернет адреси с mod_rewrite се прави основно по следните seo причини: съкращаване...
- Пренасочване на домейн Пиша тази статия като продължение на Приложна магия с mod_rewrite в htaccess Пренасочване на домейн Както вече писах в статията...
- Премахване на грешки в сайт и преминаване към XHTML Тази статия е за често срещани HTML грешки в сайтовете и оправянето им с помощта на HTML валидатора http://validator.w3.org Валидаторът...