Публикувано в (Уеб програмиране) от на 18 февруари 2010 в 22:02

Тази статия е продължение на статията Приложна магия с 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]
VN:F [1.9.16_1159]
Рейтинг: 10.0/10 (2 гласа)
Премахване на .html от URL адреса с mod_rewrite, 10.0 out of 10 based on 2 ratings
Брой разглеждания на тази статия: 4930

Сподели статията в Бутончета на сайтове, в които можете да споделите линк към тази страница.
  • CenBg.com
  • BgrStar.com
  • Novoto.net
  • Bghot.net
  • Trohi.com
  • Zdravei.net
  • Web-bg.com
  • Plus
  • Facebook
  • Twitter

Подобни статии:

  1. Приложна магия с mod_rewrite в htaccess Пренаписване на интернет адреси с .htaccess Промяната на интернет адреси с mod_rewrite се прави основно по следните seo причини: съкращаване...
  2. Пренасочване на домейн Пиша тази статия като продължение на  Приложна магия с mod_rewrite в htaccess Пренасочване на домейн Както вече писах в статията...
  3. Премахване на грешки в сайт и преминаване към XHTML Тази статия е за често срещани HTML грешки в сайтовете и оправянето им с помощта на HTML валидатора http://validator.w3.org  Валидаторът...
Ако тази статия е била полезна за теб може да почерпиш автора в тази страница »


Коментари
Богдан на 18 февруари 2010 в 23:19       директен линк

ами правя един .htaccess файл и копирам цялото това съдържание в него, слагам файла в главната директория и нищо не става

излиза ей това: Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, root@host.bg and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Богдан на 18 февруари 2010 в 23:26       директен линк

впрочем става, но като е да друг сървър, явно ина някакъв проблем със сървъра на ХОСТ.БГ, някаква идея какво да направя, тъй като хоствам в хост.бг

gan на 18 февруари 2010 в 23:27       директен линк

На първо място .htaccess файла трябва да има права за достъп 755, а не 775 (в някой FTP клиенти 755 се вижда като rw-r–r– а пък 775 се показва като rw-rw-r– ). Ако това не помогне свържи се с поддръжката на host.bg тъй като на тях си платил.
Аз приемам благодарности под формата на дарение http://ganbox.com/blog/donate/ или като връзка към сайта виж в http://ganbox.com/about ;)

Богдан на 19 февруари 2010 в 0:23       директен линк

благодаря, ще сложа линк

Светослав на 2 май 2010 в 21:39       директен линк

Здравейте,
Първо да изкажа благодарности към съдържателите на сайта. Наистина доста ценна информация има в него. По повод скрипта, дали той би работил на различен сървър от Apache?
Някъде прочетох, че модула mod_rewrite е създаден за Apache и за друг тип сървър не е приложим.

maxpowerbg на 1 юли 2010 в 17:05       директен линк

Благодарско на собственика на статията! Поставих .htaccess-a и всичко стана от раз, между другото преди пак бях искала да го направя и така и не успях, сега с този код всичко стана от първия път.
Искам да попитам а долу в „Статус Бар-а“, в левия ъгъл на браузъра, там може ли да не се вижда разширението, тъй като ида върху някой линк, там се изписва разширението, …благодаря

gan на 1 юли 2010 в 21:15       директен линк

@Светослав скоро не съм ползвал друг уеб сървър различен от Apache и не мога да отговоря категорично. Ти какъв сървър ползваш?

@maxpowerbg коментарите ти бяха влезли в спам, моля пиши истинско име, а не псевдоним като пускаш коментари.
Един начин за скриване на адреса в статус бара е чрез JavaScript код.

Мартин Радев на 21 август 2010 в 19:29       директен линк

Просто ще добавя – грешката най-вероятно излиза от Options +FollowSymLinks -MultiViews, ако ви излезе грешка. Примерно при space .bg няма да работи – въпрос на конфигурация :)

Мартин Радев на 22 септември 2010 в 11:38       директен линк

Мартин Радев@ благодаря за инфото

Напиши коментар

Твоето име: (без ключови думи!) 
Имейл: (не се показва) 
Сайт: (незадължително) 
Коментар