основной вопрос mod_rewrite - PullRequest
0 голосов
/ 13 июля 2009

Я пытаюсь написать правило, которое гласит

xyz.com / hotels_in_someplace направит на xyz.com/test.php?place=someplace

с помощью следующего в моем htaccess

RewriteEngine On
RewriteBase /

RewriteRule ^hotels_in_([a-z]+)$ test.php?place=$1 [L]

но это не работает, и я не могу понять, почему я использую сервер wamp как разработчик. когда я пытался запустить xyz.com/test.php?place=someplace (без htaccess в каталоге), это работало, но я подозреваю, что в моем правиле что-то не так.

дополнительно: упс .... моя тупая ошибка, mod_rewrite не включен ...

Ответы [ 3 ]

1 голос
/ 13 июля 2009

Попробуйте без привязки к концу строки ($)

RewriteRule ^/hotels_in_([a-z]+) /test.php?place=$1 [L]

Кроме того, вы разрешили анализировать файлы .htaccess?

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

Ваш пример отлично работает для меня. Возможно, потребуется внести несколько небольших корректировок (см. Мой пример, который фиксирует заглавные буквы, дефисы и подчеркивания (для отелей в странах с более чем одним словом (United States, United_states)) и косую черту в конце).

RewriteRule ^hotels_in_([A-Za-z_-]*)(/?)$ /test.php?place=$1

Надеюсь, это поможет.

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

Обновление: я не заметил RewriteBase в вопросе раньше, поэтому моя точка зрения по поводу начального слеша равна нулю. Однако RewriteRule работает на моей машине.


Попробуйте:

RewriteRule ^hotels_in_([a-z]+)$ /test.php?place=$1 [L]

Путь к test.php требует косой черты. При переписывании вы будете перенаправлены на xyz.com/path/to/web/docs/on/machine/test.php, и это не то, что вам нужно. :)

Также, если вы используете в своем тесте косую черту.

Вышеуказанное правило не будет соответствовать xyz.com/hotels_in_someplace/.

Чтобы соответствовать ведущему слешу, это должно работать:

RewriteRule ^hotels_in_([a-z]+)/?$ /test.php?place=$1 [L]
...