mod_rewrite перенаправляет испорченные пути - PullRequest
0 голосов
/ 17 июля 2009

Вот редирект, который у меня есть:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?username=$1

Проблема в том, что если я наберу http://www.example.com/apple, все в порядке, когда дело доходит до моих ссылок на странице.

НО, если я использую http://www.example.com/apple/ (обратите внимание на последнюю косую черту), тогда все ссылки облажаются.

Как мне написать .htaccess, чтобы ссылки не включали последнюю косую черту и не испортили ссылки на странице?

Обновление: в итоге я использовал:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$  /$1 [R=301,L]

Ответы [ 2 ]

2 голосов
/ 17 июля 2009

Вы можете удалить косую черту следующим:

удалить-те замыкающий слэш-из-вашего-URIs

Затем обработайте как обычно после этой точки.

0 голосов
/ 17 июля 2009

Вам следует рассмотреть возможность использования абсолютных путей URL или абсолютных URL для ссылки на внешние ресурсы.

Поскольку относительные URL-адреса разрешаются из базового URL-адреса, то есть URL-адрес текущего документа, если не указано иное (см. BASE HTML-элемент ). Поэтому, если вы ссылаетесь на /baz/quux, используя только относительный URL-путь baz/quux, он будет правильно разрешен до /baz/quux при использовании в /foo, но будет разрешен до /foo/baz/quux при использовании в /foo/bar. Но абсолютный путь URL /baz/quux всегда разрешается до /baz/quux.

...