it-swarm.com.ru

RewriteRule создает 500 внутренних ошибок сервера

В моем файле .htaccess есть следующее:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^directory/(.*)$ directory/index.php?id=$1

То, что я пытаюсь достичь, это:

При посещении URL www.mydomain.com/directory/10 страница www.mydomain.com/directory/?id=10 отображается в браузере без изменения внешнего вида URL.

Приведенный выше код создает 500 Внутренняя ошибка сервера, хотя.

Кто-нибудь знает, где я иду не так?

10
Tom

Ваш код гарантированно генерирует 500 внутренних ошибок сервера, потому что это вызывает бесконечный цикл. Причина в том, что ваш соответствующий шаблон URI: ^directory/(.*)$

Который соответствует вашим URL до и после переписывает. И как только он достигает максимально допустимого внутреннего предела перезаписи, Apache выдает 500 внутренних ошибок сервера и выдает ошибку.

Измените свой код на это:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^directory/(.*)$ /directory/index.php?id=$1 [L,QSA,NC]

Вышеприведенный код имеет дополнительный RewriteCond %{REQUEST_FILENAME} !-f, который позволит запретить последующее выполнение RewriteRule после первого раза, поскольку /directory/index.php будет допустимым файлом.

17
anubhava

У меня возникла та же проблема, и я обнаружил, что модуль «переписать» в моем случае еще не включен. Поэтому мне нужно включить его, а затем перезапустить сервер Apache:

  • Включить модуль «перезапись»: Sudo a2enmod rewrite
  • Затем перезапустите сервер Apache: Служба Sudo перезагрузите Apache2

Надеюсь, это кому-нибудь поможет.

11
Brilliant

Вы должны попробовать добавить косую черту вперед:

RewriteRule ^/directory/(.*)$ directory/index.php?id=$1

Я был пойман с этим раньше.

В качестве альтернативы используйте RewriteLog и RewriteLogLevel для отладки и посмотрите на ошибки Apache и журналы доступа для получения дополнительной информации:

RewriteLogLevel 3
RewriteLog ${Apache_LOG_DIR}/rewrite.log

Это оставит файл журнала в вашем каталоге журналов Apache. В моем случае это /var/log/Apache

1
Paul S

Если вы используете CodeIgniter и у вас проблемы с ошибками 500. Следуйте решению.

Таким образом, чтобы удалить сегмент «index.php» URL-адресов в CodeIgniter, вам нужно сделать 2 вещи. Первый - отредактировать файл /system/application/config/config.php, изменив значение политики index_page на пустое:

$config['index_page'] = '';

Второй шаг - создать файл .htaccess

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

И это все! Отныне URL вашего сайта/системы, созданные с помощью CodeIgniter, больше не будут иметь поток (называемый «раздражающим» некоторыми) «index.php».

0
Davi Sousa