Еще один вопрос с косой чертой в mod_rewrite - PullRequest
2 голосов
/ 15 февраля 2009

В моем файле .htaccess есть следующие правила перезаписи:

RewriteEngine on
RewriteRule ^news/([0-9]+)/?$ /?action=news&start=$1 [L]
RewriteRule ^man/([a-zA-Z0-9_]+)/?$ /?action=man&page=$1 [L]
RewriteRule ^([a-zA-Z0-9_]+)/?$ /?action=$1 [L]

Все затем заканчиваются /?, чтобы проверить наличие дополнительной косой черты. Это работает - это значит, что я могу использовать либо http://www.site.com/news/, либо http://www.site.com/news, чтобы перейти на страницу news, что я и хочу. Проблема в том, что, хотя http://www.site.com/news/ работает нормально и тихо перенаправляет и все эти забавные вещи, http://www.site.com/news по некоторым причинам явно перенаправляется на http://www.site.com/news/?action=news Они оба придумали один и тот же сайт, но по какой-то причине, если я опущу косую черту, URL-адрес изменится и будет выглядеть ужасно.

Есть идеи, что с этим происходит? У меня нет других правил в моем файле .hyaccess. Я также укажу, что http://www.site.com/news/0 и http://www.site.com/news/0/ не страдают от одной и той же проблемы. Они оба незаметно перенаправляют на http://www.site.com/?action=news&start=0, что я и хочу. Это только кажется проблемой с этим третьим правилом.

Если это поможет, сайт находится на SourceForge.net.

Ответы [ 2 ]

9 голосов
/ 15 февраля 2009

Дикая догадка: существует каталог с именем "news", и автоматический редирект Apache "add a trailing slash" запускает и взаимодействует с RewriteRule странным образом. Если это так,

DirectorySlash Off

может помочь.

0 голосов
/ 15 февраля 2009

Может быть MultiViews вызывает такое поведение. Попробуйте отключить эту опцию:

Options -MultiViews

Еще одно предположение: уберите косую черту в подстановке.

...