#php #apache #mod-rewrite #redirect
#php #apache #mod-перезапись #перенаправление
Вопрос:
Я не уверен, возможно ли это, но я хочу использовать mod_rewrite следующим образом:
http://abc.com/something => http://abc.com/script.php?q=something
Это не работает:
Options FollowSymLinks
RewriteEngine on
RewriteRule /(.*)$ /script.php?q=$1
Возможно ли это сделать?
Редактировать: я должен упомянуть, что mod_rewrite работает нормально, когда я использую это, например:
Options FollowSymLinks
RewriteEngine on
RewriteRule script/(.*)$ /script.php?q=$1
Отредактируйте еще раз: http://emailsms.me/redirect.php?id=abc
Используя это:
RewriteEngine on
RewriteRule ^([A-z]{1,})$ /redirect.php?q=$1
Так что теоретически http://emailsms.me/abc должен выводить abc (все, что он делает, это повторяет ввод в данный момент). но вместо этого я получаю ошибку 404.
Обновление: кажется, что Options FollowSymLinks вызывает проблему здесь. Если я закомментирую это, я получу ошибку 404, но когда она есть, и я добавляю что угодно (я имею в виду что угодно, даже #), я получаю эту ошибку в своих журналах:
[Fri Oct 14 02:20:26 2011] [alert] [client 1.2.3.4] /home/me/redirects/.htaccess: Illegal option #
Комментарии:
1.
mod_rewrite
Установлен и загружен в Apache?2. Да, это так. Я могу делать обычные перенаправления, такие как: RewriteRule script/(.*)/$ /script.php?q = $ 1, но тот, который в моем вопросе, выдает мне ошибку 500.
3. Можете ли вы взглянуть на журналы Apache? Что они говорят, когда вы делаете запрос на эту страницу?
4. На данный момент я вижу это: /home/me/redirects/.htaccess: недопустимая опция RewriteEngine
5. Недопустимый параметр означает, что он думает, что вы задали нераспознанный параметр директиве «Option». Есть ли у вас случайная «Опция» в вашем htaccess?
Ответ №1:
Попробуйте это:
Options FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /script.php?q=$1 [L,QSA]
Вероятно, вам не нужна косая черта в конце в вашем правиле перезаписи, и вам нужно проверить, что запрошенный файл не существует (2 строки RewriteCond), иначе вы получите ошибку сервера 500, потому что циклы перезаписи (/script.php всегда будет соответствовать ^(.*) $ и будет переписан снова). Обратите внимание, что если у вас нет /script.php файл, вы получите ошибку 500, потому что перезапись будет зацикливаться.
Ответ №2:
Похоже, вы делаете это из .htaccess, а не из конфигурации vhost. В этом случае вы должны потерять первый / в вашем RewriteRule.
Ответ №3:
Вы могли бы попробовать что-то вроде:
RewriteEngine on
RewriteRule ^([A-z]{1,})$ /script.php?q=$1
Как вы можете видеть, происходит сбой с (.*)
Комментарии:
1. Ошибка 404, когда я использую это. Взгляните на мой первоначальный вопрос для примера реального мира.
2. Если вы получаете 404, он не находит php-файл, на мой взгляд, o.o
3. Если вы перейдете по URL напрямую, вы можете увидеть его там: emailsms.me/redirect.php?id=asd
4. Я все равно не могу посетить URL-адрес.
5. Что вы видите? Я вижу, что я должен, то есть все, что вы вводите в id ex. emailsms.me/redirect.php?id=something покажет слово что-нибудь.