Назад | Перейти на главную страницу

.htaccess перезапись не получает правильный URL

Я переношу веб-сайт со старого сервера, который отключается, на новый, и в процессе у меня возникают проблемы с Apache и mod_rewrite. У меня есть следующий файл .htaccess:

RewriteEngine on
RewriteRule ^audio/(.*?)/.*?$ audio.php?id=$1
RewriteRule ^books/(.*?)/.*?$ books.php?id=$1

Audio.php и books.php вызываются, как ожидалось, за исключением того, что захваченные переменные не передаются, поэтому в случае rewriterule audio.php мне предоставляется страница audio.php, но $_GET пусто.

Чтобы проверить, что происходит, я добавил RewriteRule (.*) test.php?a=$1 где test.php только что сбросил $_GET когда я сделал это $_GET['a'] содержит test.php.

В журнале ошибок ничего не отображается, и поскольку правильные файлы обслуживаются, очевидно, что перезапись в основном работает, а в конфигурации AllowOverride All Что я делаю не так?

Я хочу прояснить, что этот файл htaccess работал так же, как и на старом сервере.

Вам следует настроить RewriteLog с высоким RewriteLogLevel чтобы ваши правила обрабатывались так, как вы ожидаете.

Имейте в виду, что .*? может дать пустое совпадение, потому что * средства 0 или больше. По крайней мере, вы можете захотеть использовать + (так, .+?), что значит один или больше.

Anyhoo. Есть лучшие способы выразить то, что вы ищете.

Чтобы соответствовать до следующей косой черты, это должно делать:

RewriteRule ^audio/([^/]+) /audio.php?id=$1

Хотя, если это числовой идентификатор, можно уточнить:

RewriteRule ^audio/(\d+) /audio.php?id=$1

Это действительно будет зависеть от того, что вы будете делать после этого. Какой путь передается к исходному запросу? Всегда ли это / audio / some_id / other_stuff? Какая еще есть конфигурация для путей со словом "audio"? Для запроса формы:

http://www.example.com/audio/some_id/other_stuff

вам, вероятно, понадобится RewriteRule:

ReWriteRule ^/audio/(.*)/.*$ /audio.php?id=$1

Я думаю .*? не делаете то, что хотите. Дайте ему кружиться и посмотрите, что он сделает. Вы также можете найти справочное руководство по регулярным выражениям Perl полезно.