Перенаправить запрос на имя-каталога в каталог-name.html с помощью htaccess - PullRequest
0 голосов
/ 08 декабря 2011

На моем веб-сайте, когда кто-то запрашивает каталог, я хочу, чтобы он удалил «/» и добавил «.html» (конечно, без кавычек).

Пример:
Если кто-топереходит на domain.com/directory/ он должен перенаправить на domain.com/directory.html/ и то же самое должно означать: domain.com/another-directory/ должен перенаправить на domain.com/another-directory.html.

Я хотел бы поместить строку (или две) кода в мойhtaccess файл, который будет перенаправлять любой каталог (URL, заканчивающийся на /) на URL.html (конечно, удаляя /).

Я также хотел бы, чтобы он перенаправлял визуально, чтобы пользовательна самом деле он изменится на .html.

Я довольно начинающий веб-программист, и любая помощь очень ценится.

Примечание: я использовал Redirect /directory /directory.html, и это сработало,но это требует много дополнительного кодирования, и я бы предпочел, чтобы одно простое утверждение охватывало все каталоги.

1 Ответ

1 голос
/ 08 декабря 2011

Это будет немного сложно с htaccess, я полагаю, вы хотите сделать следующее:

  1. Если кто-то обращается к каталогу, который не является корневым (просто http://domain.com/), перенаправьте его на имя каталога, заканчивающееся на .html
  2. После перенаправления внутренне перепишите .html обратно в каталог, чтобы apache мог обслуживать каталог.

Первый из них прост:

# check to make sure the request isn't actually for an html file
RewriteCond %{THE_REQUEST} !^([A-Z]{3,9})\ /(.+)\.html\ HTTP
# check to make sure the request is for a directory that exists
RewriteCond %{REQUEST_FILENAME} -d
# rewrite the directory to 
RewriteRule ^(.+)/$ /$1.html [R]

Вторая часть хитрая

# check to make sure the request IS for an html file
RewriteCond %{THE_REQUEST} ^([A-Z]{3,9})\ /(.+)\.html\ HTTP
# See if the directory exists if you strip off the .html
RewriteCond %{DOCUMENT_ROOT}/%2 -d
# Check for an internal rewrite token that we add
RewriteCond %{QUERY_STRING} !r=n
# if no token, rewrite and add token (so that directories with index.html won't get looped)
RewriteRule ^(.+)\.html /$1/?r=n [L,QSA]

Однако, если у вас есть только набор файлов с именами directory.html, directory2.html, directory3.html и т. Д., И вы хотите сделать это, когда кто-то вводит http://domain.com/directory2/ в адресную строку они получают содержимое directory2.html, это будет намного проще:

# check to make sure the request isn't actually for an html file
RewriteCond %{THE_REQUEST} !^([A-Z]{3,9})\ /(.+)\.html\ HTTP
# check to see if the html file exists (need to do this to strip off the trailing /)
RewriteCond %{REQUEST_URI} ^/(.+)/$ 
RewriteCond %{DOCUMENT_ROOT}/%1.html -f
# rewrite
RewriteRule ^(.+)/$ /$1.html [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...