2015-02-02 4 views
1

Я пытаюсь настроить некоторые довольно URL, так.htaccess правило перезаписи не работает для меня

http://www.foo.com/results/2014

звонки

http://www.foo.com/results/index.php?year=2014

Где 2014 "действительно может быть любой строкой (и я буду делать соответствующую обработку ошибок, если я получу неправильный ввод).

Что я получаю, однако, то, что http://www.foo.com/results/ работает нормально, но что-то после завершающей косой черты возвращает ошибку 404.

Ниже приведено содержимое моего файла .htaccess. Может ли кто-нибудь указать мою ошибку?

Заранее благодарен!

.htaccess

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.foo.com/results/$1 [L,R=301] 
RewriteRule ^results/([^/]+)/?$ /results/index.php?year=$1 
+0

не является '/ результаты /' физический каталог? Где находится этот .htaccess? – anubhava

+0

Да '/ results /' - это каталог, внутри которого находятся файлы .htaccess и index.php. – SenorAmor

ответ

1

Имейте это так внутри /results/ каталога:

RewriteEngine On 
RewriteBase /results/ 

RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

RewriteRule ^([^/.]+)/?$ index.php?year=$1 [L,QSA] 

Причина, почему ваше правило не работает:

  1. Вы можете соответствовать только URI шаблон относительно текущего каталога. Так что, если вы уже в results/ папке и URI является /results/foo то -ий URI будет foo в RewriteRule
  2. Не допускается использование RewriteBase
+0

Это работает, но, похоже, не работает, если я удаляю «www» в URL. Если я это сделаю, он перенаправляется на 'www.foo.com/$ 1' вместо' www.foo.com/results/$ 1'. – SenorAmor

+0

Я отредактировал часть, чтобы исправить ее сейчас. – anubhava

+0

Отлично, спасибо! Не думайте, что я могу заставить вас дать мне 30-секундный сюжет о том, почему вы работаете, а у меня нет, а? (Я по-прежнему буду отмечать ваш ответ как правильный, в любом случае.) – SenorAmor

Смежные вопросы