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

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

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

чего я пытаюсь достичь, так это:

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

приведенный выше код создает ошибку внутреннего сервера 500.

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

4 ответов


ваш код гарантированно генерирует 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= [L,QSA,NC]

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


Я получил ту же проблему и обнаружил, что модуль "переписать" еще не включен в моем случае. Поэтому мне нужно включить его, а затем перезапустить сервер apache:

  • включить "rewrite модуль": sudo a2enmod переписать
  • затем перезапустите сервер apache:перезапуск службы sudo apache2

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


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

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

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

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

RewriteLogLevel 3
RewriteLog ${APACHE_LOG_DIR}/rewrite.log

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


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

таким образом, чтобы удалить сегмент " индекс.php " URLs в CodeIgniter, вам нужно сделать 2 вещи. Первый-отредактировать /system/application/config/config.php file, изменяя значение политики index_page на пустое:

$config['index_page'] = '';

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

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

и это все! Отныне URL-адреса вашего сайта / системы, сделанные с помощью CodeIgniter, больше не будут иметь потока (некоторые называют его "раздражающим") "индекс.РНР."