Я пытаюсь использовать .htaccess и mod_rewrite для перенаправления URL-адресов на моем сайте.Как перенаправить подкаталог в каталог и строку запроса?
Я хотел бы иметь его так, чтобы /questions/12345
и /users/12345
перенаправлять /questions/display.php?id=12345
и /users/display.php?id=12345
соответственно.
Я бы также хотел бы добавить ярлык, вроде Stack биржи, в результате чего /q/12345/6789
переписывается /questions/display.php?id=12345&refer=6789
.
До сих пор, полистав severalsources, я получил это:
RewriteEngine On
RewriteRule ^users/([^/]+) /users/display.php?id=$1 [NC]
RewriteRule ^questions/([^/]+) /questions/display.php?id=$1 [NC]
RewriteRule ^q/([^/]+)/([^/]+) /questions/display.php?id=$1&referer=$2 [NC]
Однако, когда я перейти к /questions/12345
, я получаю ошибку 500 Internal Server - так ясно, что это не работает ,
Взглянув в журнале ошибок Apache, это показывает, что это то, что происходит:
AH00124: Запрос превысил лимит 10 внутренних переадресовывает из-за вероятную ошибку конфигурации. Используйте «LimitInternalRecursion», чтобы увеличить предел, если это необходимо. Используйте «LogLevel debug», чтобы получить обратную трассировку.
Что здесь не так, и что должно Я сделал?
Не будет ли регулярное выражение '[^ /] +' также соответствовать тексту 'display.php? Id ='? Возможно, вам нужно настроить ваше регулярное выражение так, чтобы оно соответствовало только интересующему вас шаблону, то есть чем-то вроде '^ users/([0-9] +)'. Кроме того, когда вы получаете ошибку 500, что добавляется в ваши журналы Apache? 500 - это то, что возвращает пароли в браузер; ваш журнал должен содержать причину 500. – ghoti
Правильно, поэтому вы переписываете '/ users/123 /' на '/users/display.php? id = 123', который затем переписывается на'/users/display. php? id = display.php? id = 123' и т. д. – ghoti
@ghoti - ошибка в сообщении. Однако ваша идея 0-9, похоже, исправила ее ... как-то. Чак это в ответ. – ArtOfCode