mod_rewrite из базы домена

#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 покажет слово что-нибудь.