Я использую следующее в .htaccess
(mod_rewrite
), чтобы убрать косую черту с моих URL:
RewriteRule ^([a-z0-9_-]+)/$ $1 [L,NC,R=301]
Конечно, поскольку класс символа не соответствует косой черте, это отлично работает для таких ссылок, как some_page/
, но нет article/some_page/
.
Если я добавлю косую черту к классу символов, чтобы сделать [a-z0-9_/-]
, Я получаю бесконечный цикл при попытке загрузить страницу. Я также пробовал сделать +
не жадный, используя +?
, но это тоже не сработало; и удаление R=301
перенаправить.
(Если это имеет значение, страница для загрузки, /article/some_page/
на самом деле /article/some_page/index.html
, Я просто хочу, чтобы он выглядел как /article/some_page
.)
Если это имеет значение
Да, это так. Apache (mod_dir) отправит обратно перенаправление, если вы передадите URL-адрес, который сопоставляется с каталогом без завершающего '/', например
[colinm@example ~]$ curl -I http://localhost/somedir
HTTP/1.1 301 Moved Permanently
Date: Mon, 24 Oct 2011 11:48:37 GMT
Server: Apache/2.2.3 (Red Hat)
Location: http://localhost/somedir/
Content-Type: text/html; charset=iso-8859-1