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, больше не будут иметь потока (некоторые называют его "раздражающим") "индекс.РНР."