В моем файле .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.
Кто-нибудь знает, где я ошибаюсь?
Гарантируется, что ваш код будет генерировать 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
который будет /directory/index.php
последующее выполнение RewriteRule после первого раза, так как /directory/index.php
будет действительным файлом.
У меня такая же проблема, и я обнаружил, что модуль «переписать» еще не включен в моем случае. Поэтому мне нужно включить его, а затем перезапустить сервер Apache:
Надеюсь, это поможет кому угодно.
Вы должны попробовать добавить косую черту вперед:
RewriteRule ^/directory/(.*)$ directory/index.php?id=$1
Я был пойман с этим раньше.
В качестве альтернативы используйте RewriteLog и RewriteLogLevel для отладки и посмотрите информацию об ошибках Apache и журналах доступа для получения дополнительной информации:
RewriteLogLevel 3 RewriteLog ${APACHE_LOG_DIR}/rewrite.log
Это оставит файл журнала в вашем каталоге журнала apache. В моем случае это /var/log/apache
Если вы используете 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».