Действительно странная проблема с .htaccess

Допустим, мой веб-сайт www.example.com и у меня есть страница contact.html в корне. URL-адрес, обычно отображаемый в адресной строке: http://example.com/contact.html

Для моего сайта я хочу, чтобы URL-адрес имел:

  1. no www
  2. no .html
  3. a trailing slash

Таким образом, окончательный результат должен выглядеть следующим образом: http://example.com/contact/< /сильный>

Условие № 1 по умолчанию, так что меня это не беспокоит.

Для условия 2 (без «.html») у меня есть следующий код в моем файле .htaccess в корневом каталоге:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

...и работает отлично.

Теперь перейдем к условию 3 (применение завершающей косой черты). У меня есть следующий код в файле .htaccess перед командами перезаписи «Условия 2»:

RewriteEngine On
RewriteCond %{REQUEST_URI} !(/$|\.) 
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]

...это не работает; Страница перенаправляется на страницу с ошибкой 404, а в адресной строке отображается: http://example.com/404.html... ДА, с косой чертой в конце:/

Что я делаю не так?

У меня есть папка с именем archives, в корневом каталоге которой я хочу выполнить индексацию. Поэтому я просто добавил файл .htaccess в папку «архивы» и добавил следующий простой код:

Options +Indexing

Но это не работает; Меня перенаправляют на страницу ошибки 403! Я на 99% уверен, что это связано с файлом .htaccess в корневом каталоге.


person Mihir Chaturvedi    schedule 04.11.2016    source источник
comment
Пожалуйста, извините, что не отвечаю. Когда я читаю вопрос, содержащий .htaccess и странный, я автоматически ищу RewriteRule в теле вопроса. И вот, я всегда нахожу его. В вашем вопросе, к сожалению, не повезло, что он также содержит термин «скопировано», что действительно обескураживает меня, чтобы дать ответ. Я сожалею об отсутствии мотивации с моей стороны! Возможно, эта страница поможет вам в дальнейшем: httpd.apache.org/docs/2.2/rewrite   -  person Boldewyn    schedule 04.11.2016
comment
О, я забыл твою дополнительную проблему. Прости за это! Ответ: да, .htaccess в корне страницы вызывает эту проблему.   -  person Boldewyn    schedule 04.11.2016
comment
@Boldewyn Я использовал «скопированную вставку» только потому, что действительно так делал, но, конечно, с умом. Кроме того, как решить вторую проблему?   -  person Mihir Chaturvedi    schedule 04.11.2016
comment
@starkeen отредактировал вопрос   -  person Mihir Chaturvedi    schedule 04.11.2016
comment
См. связанный вопрос.   -  person Amit Verma    schedule 04.11.2016
comment
Пусть .htaccess в корне не берет на себя безоговорочно запросы на отсутствующие файлы (часть !-f). Например, добавьте что-то вроде RewriteCond %{REQUEST_URI} !/archives/.* или подобное.   -  person Boldewyn    schedule 04.11.2016


Ответы (1)


Попробуйте с:

RewriteEngine On

RewriteCond %{REQUEST_URI} !(/$|\.) 
RewriteRule (.+) %{REQUEST_URI}/ [R=301,L]

# remove html
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.html -f 
RewriteRule ^([^\.]+)/?$ $1.html [NC,L]
person Croises    schedule 04.11.2016
comment
Нет, это не работает :(... Я получаю сообщение об ошибке 404, но адресная строка действительно удаляет .html и добавляет косую черту в конце - person Mihir Chaturvedi; 04.11.2016
comment
Настоящее имя вашего файла contact.html (не contact)? - person Croises; 04.11.2016
comment
И я не удаляю .html, если вы его используете. Вы очистили кеш? - person Croises; 04.11.2016
comment
Я попробую еще раз. - person Mihir Chaturvedi; 04.11.2016
comment
Ничего не изменилось. Даже после очистки кеша. Я все еще получаю ошибку 404... - person Mihir Chaturvedi; 04.11.2016
comment
В каком случае (url) у вас возникла проблема? - person Croises; 04.11.2016