На моем локальном сервере WAMP следующие строки в .htaccess не вызывают проблем и делают то, что я хочу:
RewriteEngine On
Options FollowSymLinks
RewriteRule ^foo/([0-9]+)/[a-z0-9-]*?$ foo.php?id=$1 [L]
Когда я загружаю это на свой размещенный (LAMP) сайт, он вызывает ошибку 500 (независимо от того, входит ли rewriterule в игру или нет). После долгой работы исправление заключалось в том, чтобы удалить модификатор unhungry / lazy из регулярного выражения, то есть:
RewriteEngine On
Options FollowSymLinks
RewriteRule ^foo/([0-9]+)/[a-z0-9-]*$ foo.php?id=$1 [L]
Теперь, в случае, я представил это спорно, служит ли разница в регулярном выражении каких-либо цели, но все же на мой взгляд, первый пример действителен, и он сделал работу на моем локальном сервере WAMP. Кто-нибудь знает, почему я получил ошибку 500?
Добавьте косую черту перед foo.php:
RewriteRule ^foo/([0-9]+)/[a-z0-9-]*?$ /foo.php?id=$1 [L]
или переместите правила перезаписи из конфигурации виртуального хоста в .htaccess.