2015-09-05 2 views
1

Я хотел бы, чтобы удалить все завершающие расширения для типа spefic файла (например, удалить все .html и пусть все остальное как есть).htaccess - Force URLS от «реж/page.html» → «реж/страницы»

Так, например, если пользователь перейдет на страницу <my-site>/how-to/use-git.html, он будет перенаправлен на <my-site>/how-to/use-git (с или без трейлинга /). Любой другой запрос (например, <my-site>/how-to/img1.jpg) будет оставлен как есть (<my-site>/how-to/img1.jpg).

При просмотре вокруг, я не мог найти что-то, удовлетворяющий следующим условиям (как):

  • Удалить .html
  • Force, чтобы перейти к URL без расширения

I Пробовал такие вещи

# From http://stackoverflow.com/questions/27553722/htaccess-mod-rewrite-how-to-modify-url-from-pages-pagename-cfm-to-pagename 
RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} \s/+pages/(.+?)\.html[\s?] [NC] 
RewriteRule^/%1/ [R=302,L,NE] 

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

Но это не заставляет страницы идти в верху без расширения.

Добавление

# From http://www.webweaver.nu/html-tips/web-redirection.shtml 
RedirectMatch 301 (.*)\.html$ $1 

создает 404 не найдена ошибка.

ответ

1

Вы можете использовать эти правила в файле DOCUMENT_ROOT/.htaccess:

RewriteEngine On 

# To externally redirect /path/file.html to /path/file 
RewriteCond %{THE_REQUEST} /(.+?)\.html[\s?] [NC] 
RewriteRule^/%1 [L,R=302] 

## To internally redirect /path/file to /path/file.html 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule ^(.+?)/?$ $1.html [L] 
+1

Спасибо! Я отлично работаю! – leowzukw