I have two main problems with mod_rewrite:
-
There is no meaningful error reported when I have an invalid rule
-
To reliably test each modification, I have to erase Google Chrome’s cache. This isn’t rocket science, but I have to hit Ctrl + Shift + Delete, click OK, and close the window, and reload.
I’d like to see if any of the gurus are willing to share their secrets to efficiently managing mod_rewrite code.
asked Mar 9, 2012 at 10:54
2
One trick is to turn on the rewrite log. To turn it on, try this line in your Apache HTTP Server main configuration or current virtual host file (not in .htaccess):
LogLevel alert rewrite:trace6
Before Apache httpd 2.4 mod_rewrite, such a per-module logging configuration did not exist yet. Instead you could use the following logging settings:
RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
answered Mar 9, 2012 at 11:02
BenBen
4,3323 gold badges22 silver badges20 bronze badges
9
For basic URL resolution, use a command line fetcher like wget or curl to do the testing, rather than a manual browser. Then you don’t have to clear any cache; just up arrow and press Enter in a shell to rerun your test fetches.
answered Mar 9, 2012 at 22:18
KazKaz
54.1k9 gold badges97 silver badges145 bronze badges
5
There’s the htaccess tester.
It shows which conditions were tested for a certain URL, which ones met the criteria and which rules got executed.
It seems to have some glitches, though.
answered Jun 15, 2015 at 12:49
AndyAndy
4,0802 gold badges24 silver badges47 bronze badges
5
Based on Ben’s answer, you could do the following when running Apache on Linux (Debian in my case).
First create the file rewrite-log.load.
/etc/apache2/mods-availabe/rewrite-log.load
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
Then enter
$ a2enmod rewrite-log
followed by
$ service apache2 restart
And when you are finished with debugging your rewrite rules,
$ a2dismod rewrite-log && service apache2 restart
answered Oct 27, 2013 at 11:36
FlowFlow
23.4k15 gold badges98 silver badges155 bronze badges
3
Here are a few additional tips on testing rules that may ease the debugging for users on shared hosting
1. Use a Fake-user agent
When testing a new rule, add a condition to only execute it with a fake user-agent that you will use for your requests. This way it will not affect anyone else on your site.
e.g
#protect with a fake user agent
RewriteCond %{HTTP_USER_AGENT} ^my-fake-user-agent$
#Here is the actual rule I am testing
RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteRule ^ http://www.domain.com%{REQUEST_URI} [L,R=302]
If you are using Firefox, you can use the User Agent Switcher to create the fake user agent string and test.
2. Do not use 301 until you are done testing
I have seen so many posts where people are still testing their rules and they are using 301’s. DON’T.
If you are not using suggestion 1 on your site, not only you, but anyone visiting your site at the time will be affected by the 301.
Remember that they are permanent, and aggressively cached by your browser.
Use a 302 instead till you are sure, then change it to a 301.
3. Remember that 301’s are aggressively cached in your browser
If your rule does not work and it looks right to you, and you were not using suggestions 1 and 2, then re-test after clearing your browser cache or while in private browsing.
4. Use a HTTP Capture tool
Use a HTTP capture tool like Fiddler to see the actual HTTP traffic between your browser and the server.
While others might say that your site does not look right, you could instead see and report that all of the images, css and js are returning 404 errors, quickly narrowing down the problem.
While others will report that you started at URL A and ended at URL C, you will be able to see that they started at URL A, were 302 redirected to URL B and 301 redirected to URL C. Even if URL C was the ultimate goal, you will know that this is bad for SEO and needs to be fixed.
You will be able to see cache headers that were set on the server side, replay requests, modify request headers to test ….
Here are a few additional tips on testing rules that may ease the debugging for users on shared hosting
1. Use a Fake-user agent
When testing a new rule, add a condition to only execute it with a fake user-agent that you will use for your requests. This way it will not affect anyone else on your site.
e.g
#protect with a fake user agent
RewriteCond %{HTTP_USER_AGENT} ^my-fake-user-agent$
#Here is the actual rule I am testing
RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteRule ^ http://www.domain.com%{REQUEST_URI} [L,R=302]
If you are using Firefox, you can use the User Agent Switcher to create the fake user agent string and test.
2. Do not use 301 until you are done testing
I have seen so many posts where people are still testing their rules and they are using 301’s. DON’T.
If you are not using suggestion 1 on your site, not only you, but anyone visiting your site at the time will be affected by the 301.
Remember that they are permanent, and aggressively cached by your browser.
Use a 302 instead till you are sure, then change it to a 301.
3. Remember that 301’s are aggressively cached in your browser
If your rule does not work and it looks right to you, and you were not using suggestions 1 and 2, then re-test after clearing your browser cache or while in private browsing.
4. Use a HTTP Capture tool
Use a HTTP capture tool like Fiddler to see the actual HTTP traffic between your browser and the server.
While others might say that your site does not look right, you could instead see and report that all of the images, css and js are returning 404 errors, quickly narrowing down the problem.
While others will report that you started at URL A and ended at URL C, you will be able to see that they started at URL A, were 302 redirected to URL B and 301 redirected to URL C. Even if URL C was the ultimate goal, you will know that this is bad for SEO and needs to be fixed.
You will be able to see cache headers that were set on the server side, replay requests, modify request headers to test ….
I’m trying to get a PHP routing library set up. They give this example for a .htaccess file:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
I couldn’t get this to work, so I tried enabling mod_rewrite, but it says «Module rewrite already enabled».
Why is it not working properly? Thanks!
I’m running Ubuntu Precise 12.04, and apache2.2.22. (Checked for any updates)
EDIT: A couple more details, it’s a PuPHPet vagrant build, rewrite should be enabled.
asked Feb 17, 2014 at 10:56
You need to allow the overwrite.
<Directory "/path/to/document/root/">
AllowOverride All
</Directory>
answered Feb 17, 2014 at 11:49
Evenbit GmbHEvenbit GmbH
4,5184 gold badges22 silver badges33 bronze badges
1
First of all, set your httpd configuration to this (the path may differ with one another. In my ubuntu it’s placed at /etc/apache2/sites-available/default):
DocumentRoot /var/www
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
After that, you should enable mod_rewrite with this command:
sudo a2enmod rewrite
The last one, restart your apache service:
sudo service apache2 restart
To ensure that, you can check it again from phpinfo in Configuration > apache2handler > Loaded Modules there must be written mod_rewrite and it means mod_rewrite is enabled.
answered May 14, 2014 at 4:38
metamorphmetamorph
1,63314 silver badges14 bronze badges
2
I had the similar problem, but the other answers did not helped me. This line at the begining of .htaccess solved my problem:
Options +FollowSymLinks -MultiViews
answered Aug 28, 2018 at 18:39
1
My problem was that I didn’t have RewriteEngine on set early on in the file.
<VirtualHost *:80>
ServerName &URL&
ServerAlias *.&URL&
ServerAdmin &EMAIL_ADDRESS&
DocumentRoot /var/www/&URL&/public
RewriteEngine on
# LogLevel: Control the severity of messages logged to the error_log.
# Available values: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the log level for particular modules, e.g.
# "LogLevel info ssl:warn"
LogLevel debug
ErrorLog /var/www/&URL&/storage/logs/apache2_error.log
TransferLog /var/www/&URL&/storage/logs/apache2_transfer.log
<FilesMatch ".(cgi|html|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
# <------------ Here I used to have `RewriteEngine on`
# Handle Front Controller...
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule ^ /index.php [L,QSA]
</VirtualHost>
I dont know why but it helped when I placed RewriteEngine on higher up.
answered May 10, 2021 at 18:37
В данном уроке объясняется, что такое mod_rewrite и как его использовать. Описываются три практичных примера: перенаправление 301, создание дружественных URL и блокирование использования ссылок на изображения.
mod_rewrite — это замечательный модуль веб сервера Apache. Он очень гибкий и может выполнять много полезных функций.
Использование mod_rewrite может представлять определенные трудности для новичков по причине сложного синтаксиса и механизма обработки. Однако, стоит разобраться в нескольких базовых концепциях и можно будет эффективно использовать mod_rewrite для собственного сервера.
В данном уроке мы научимся создавать несколько базовых правил mod_rewrite на реальных примерах, которые можно будет использовать для собственного сайта. Рекомендуется тщательно изучить материал о регулярных выражениях, если вы еще не знаете что это такое.
Что такое mod_rewrite?
mod_rewrite — это модуль сервера Apache для манипуляции (изменения) URL. Часто это означает получение запроса URL от посетителя и посылка ему содержания с другого URL. Например, посетитель вводит следующий URL в адресной строке браузера:
http://www.example.com/page.html
Обычно Apache отправляет обратно пользователю содержание файла page.html. Однако с помощью mod_rewrite можно отправить содержание с другого URL, например такого:
http://www.example.com/another_page.html
Важно понимать, что изменение адреса происходит внутри сервера Apache. Адресная строка браузера по прежнему будет показывать http://www.example.com/page.html, но сервер Apache отправит содержание страницы http://www.example.com/another_page.html. В этом заключается отличие от перенаправления HTTP, которое указывает браузеру посетить другой URL.
Хотя с помощью модуля mod_rewrite можно выполнять и перенаправление HTTP и еще много других функций, таких как возвращение кодов ошибки HTTP.
Что можно делать с помощью mod_rewrite
Модуль mod_rewrite позволяет создавать правила манипулирования адресами URL. Например, вы можете вставить значение полученное из запрашиваемого URL в новый URL, организуя динамическое перенаправление URL. Или можно проверить переменные сервера, например, HTTP_USER_AGENT (тип браузера), и изменять URL только если используется браузер, например, Safari, запущенный на iPhone.
Вот несколько обычных функций, которые выполняет mod_rewrite:
- Создание «дружественных» адресов URL, которые маскируют «корявые» адреса URL. Например, вы можете маскировать с помощью отлично выглядящего адреса URL
www.example.com/articles/my-article/реальный адрес URLwww.example.com/display_article.php?articleId=my-article. И каждый сможет использовать «дружественный» адрес URL вместо реального. - Блокировать использование ссылок на изображения на вашем сайте. Чтобы остановить использование другими ресурсами изображений, размещенных на вашем сайте, можно использовать mod_rewrite для отправки ошибки «Forbidden», если ссылающийся URL не принадлежит вашему сайту.
- Перенаправление канонических адресов URL. Многие страницы доступны через несколько адресов URL — например,
www.example.com/mypage.htmlиexample.com/mypage.html. Вы можете использовать mod_rewrite постоянного перенаправления браузера на «правильный» URL, напримерwww.example.com/mypage.html. Помимо прочего такое использование mod_rewrite гарантирует отображение правильного URL в результатат поиска. - Исключение ошибки 404 в момент реорганизации вашего сайта. Например, вы переделываете сайт и переместили страницу
www.example.com/myarticle.htmlпо новому адресуwww.example.com/articles/myarticle.html. С помощью mod_rewrite вы можете перенаправитьwww.example.com/myarticle.htmlнаwww.example.com/articles/myarticle.html, так что посетитель не получит ошибку 404 «не найдена» при посещении старого адреса URL. Благодаря гибкости mod_rewrite, можно легко создать правило, которое будет перенаправлять запросы на старые адреса URL на новые адреса.
Как использовать mod_rewrite
Для использования mod_rewrite, нужно создать директивы Apache для указания модулю, что нужно делать. Директивы — это простые конфигурационные установки. Часто директивы размещаются в файле .htaccess в корневой папке вашего веб сайта. Директивы применяются для всего сайта.
Две самых важных директивы mod_rewrite:
RewriteEngine: Включает/выключает механизм mod_rewrite для текущего запроса.RewriteRule: Описывает правило изменения адреса URL.
Вот простой пример. Создайте файл .htaccess со следующим содержанием и разместите его на вашем сайте:
RewriteEngine on RewriteRule ^dummy.html$ http://www.google.com/ [R=301]
В данном файле задаются следующие установки:
-
RewriteEngine on— включаем механизм mod_rewrite -
RewriteRule ^dummy.html$ http://www.google.com/ [R=301] -перенаправялем запросы к страницеdummy.htmlна сайт Google, используя перенаправление 301.
Если теперь открыть веб-браузер и посетить страницу dummy.html на вашем сайте (например, введя в адресной строке http://www.example.com/dummy.html), то , если все было сделано без ошибок, произойдет перенаправление на сайт http://www.google.com.
Если вы получаете ошибку 404, то вероятно на вашем хостинге не используется mod_rewrite. В данном случае надо обратиться к администратору хостинга.
Как работает RewriteRule
Вы можете использовать директиву RewriteRule для создания правил перенаправления. Обобщенный синтаксис директивы имеет вид:
RewriteRule Pattern Substitution [Optional Flags]
Pattern— регулярное выражение шаблона. Если URL соответствует шаблону, то правило выполняется. Иначе правило пропускается.Substitution— новый URL, который будет использоваться вместо соответствующего шаблону адреса.[Optional Flags]— один или несколько флагов, которые определяют поведение правила.
Вы можете добавить в файл .htaccess столько правил RewriteRule, сколько нужно. Модуль mod_rewrite проходит все правила каждый раз при запросе, обрабатывая соответствующие адресу URL.
Если правило изменяет запрашиваемый URL на новый адрес, то новый URL используется дальше при проходе по файлу .htaccess, и может соответствовать другому правилу RewriteRule, размещающемуся далее в файле. (Если нужно изменить такое поведение, то надо использовать флаг L («последнее правило»).)
Несколько примеров использования mod_rewrite
Самый простой способ объяснить mod_rewrite — показать его использование при решении практических задач.
Пример 1: исключение ошибки 404
Иногда происходит изменение URL страницы на вашем сайте. Такое может произойти в момент реорганизации содержания. Если поисковый механизм или другие сайты ссылаются на старый адрес URL, то пользователь получит ошибку «404 Not Found», когда он попробует воспользоваться ссылкой.
Для решения данной проблемы вы можете использовать модуль mod_rewrite для перенаправления 301. Таким образом заголовок HTTP отсылается любому браузеру, запросившему старый адрес URL, сообщая ему о том, что страница перемещена по новому адресу. Также поисковые механизмы информируются о том, что надо обновить индексы с новым адресом URL.
Следующий файл .htaccess перенаправит запросы на новый адрес URL:
RewriteEngine on RewriteRule ^my-old-url.html$ /my-new-url.html [R=301,L]
Правило RewriteRule работает так:
^my-old-url.html$— регулярное выражение, которому соответствует адрес URL для изменения. Шаблон означает: «соответствует началу адреса URL (^), за которым следует текст'my-old-url.html', за которым следует символ окончания URL ($).» В регулярном выражении символ точки (.) означает соответствие любому символу, поэтому нужно использовать обратный слэш, чтобы указать, что нам нужна именно точка (.)./my-new-url.html -вторая часть правилаRewriteRule, которая описывает на что нужно менять. В данном случае это просто/my-new-url.html.[R=301,L]третья часть правила, которая содержит один или несколько флагов, помещенных в квадратные скобки. Флаги позволяют добавлять определенные опции или действия к правилу. В данном примере используется 2 флага:R=301означает «использовать перенаправление 301 на новый адрес URL»; аLозначает «последнее правило», или другими словами «остановить процесс обработки URL, если он соответствует правилу «.
Пример 2: создание дружественных адресов URL
Допустим, вы написали PHP скрипт display_article.php для вывода статей на вашем сайте. Вы можете ссылаться на статью с помощью следующего адреса URL:
http://www.example.com/display_article.php?articleId=my-article
Данный адрес выглядит уродливо и запрос внутри него (?articleId=my-article) может смущать некоторые поисковые механизмы. Гораздо лучше использовать адрес URL такого вида:
http://www.example.com/articles/my-article/
Вы можете задействовать mod_rewrite для преобразования ссылок первого формата во второй, что даст возможность использовать дружественные ссылки на страницах сайта, а обращение будет выполняться к реальным адресам, не видимым никому. Для этого файл .htaccess, расположенный в корневой директории вашего сайта, должен содержать следующие строки:
RewriteEngine on RewriteRule ^articles/([^/]+)/?$ display_article.php?articleId=$1 [L]
Описание правила RewriteRule:
^articles/([^/]+)/?$ -регулярное выражение, соответствующее любому URL в форматеarticles/(article ID)/. Оно гласит:»соответствует началу URL (^) , за которым следует текстarticles/, за которым следует один или более символов, не являющиеся слэшем([^/]+), за которыми может следовать слэш(/?), за которым следует символ окончания URL($)«. Обратите внимание на круглые скобки вокруг части шаблона[^/]+. Таким образом текст, соответствующей данной части, например,"my-article", сохраняется для дальнейшего использования.display_article.php?articleId=$1 -данная часть правила указывает серверу Apache использовать скриптdisplay_article.php, которому передается текст, соответствующий подшаблону[^/]+из регулярного выражения первой части (например,"my-article"), в качестве параметраarticleId.$1называется обратной связью и хранит текст соответствующий подшаблону. Если регулярное выражение содержит еще один подшаблон в круглых скобках, то соответствующий ему текст будет храниться в переменной$2,и так далее.[L] -как и в предыдущем примере мы используем флаг для остановки дальнейшей обработки URL, чтобы не произошло изменение адреса другими правиламиRewriteRule.
Выше приведенное правило RewriteRule берет запрашиваемый URL в формате http://www.example.com/articles/my-article/ и преобразует его в URL вида http://www.example.com/display_article.php?articleId=my-article.
Пример 3: предотвращаем использование ссылок на изображения на вашем сайте
Еще одной типовой задачей, которую решает использование модуля mod_rewrite, является предотвращение использования ссылок на изображения на вашем сайте другими веб проектами. Допустим, на вашем сайте есть страница http://www.example.com/mypage.html, которая содержит следующий тег img:
<img src="myphoto.jpg" alt="Моя фотография" />
Другой сайт может ссылаться на своих страницах прямо на вашу фотографию следующим образом:
<img src="http://www.example.com/myphoto.jpg" alt="Моя фотография" />
Это означает, что чужой сайт не только «заимствует» ваше изображение, но использует часть трафика вашего сервера для отображения изображения на своих страницах. И если чужой сайт имеет большой поток посетителей, то такое положение станет проблемой!
Вы можете использовать следующие директивы mod_rewrite для того, чтобы прекратить использование ссылок на изображения всеми другими сайтами, кроме вашего собственного. Разместите ниже приведенный код в файле .htaccess в корневом каталоге вашего сайта или в папке с изображениями, которые надо защитить. Измените example.com на имя вашего домена.
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?example.com/.*$ [NC]
RewriteRule .+.(gif|jpg|png)$ - [F]
Как только вы закончите выполнять все операции копирования любой браузер , запрашивающий изображения с вашего сайта использующий при запросе URL, начинающийся с имени домена, отличного от www.example.com или example.com , будет получать ошибку «403 Forbidden». что остановит использование ссылок на ваши изображения на других сайтах.
Вот как работает данный набор правил:
RewriteEngine on -включаем механизм mod_rewriteRewriteCond %{HTTP_REFERER} !^$—RewriteCondявляется еще одной директивой mod_rewrite. Она позволяет устанавливать условие, которое должно выполняться для обработки URL следующим за ним правиломRewriteRule. В данном случае условием является наличие значения в переменнойHTTP_REFERER.RewriteCond %{HTTP_REFERER} !^http://(www.)?example.com/.*$ [NC] -вторая директиваRewriteCondтребует, чтобы значение переменнойHTTP_REFERERне начиналось сhttp://www.example.com/илиhttp://example.com/. Флаг[NC]устанавливает чувствительность к регистру символов.RewriteRule .+.(gif|jpg|png)$ - [F] -если два выше предыдущих условияRewriteCondне выполняются, то правило пропускается. Само же правило возвращает ошибку «403 Forbidden» (используется флаг[F]), если URL содержит имя файла изображения (строка заканчивается на.gif,.jpgили.png), Тире в параметре подстановки означает «не надо заменять URL другим адресом».
То есть весь набор правил в файле .htaccess гласит, если переменная HTTP_REFERER содержит значение, и оно не начинается на http://example.com/ или http://www.example.com/, и запрашиваемый URL содержит имя файла изображения, то надо отказать запросу с ошибкой «403 Forbidden».
Заключение
В данном уроке мы провели введение в использование модуля сервера Apache mod_rewrite для манипулирования адресами URL. Рассмотренные три практических примера затрагивают лишь небольшую часть всех возможностей модуля. Более подробную информацию о mod-rewrite на русском языке можно найти здесь.
По умолчанию, когда вы в браузере вводите определённый URL и нажимаете Enter, веб-сервер, получивший этот запрос пытается найти файл на сервере по пути, указанному в URL. Если там ничего не указано, то открывается индексный файл, например index.html или index.php. Если же ничего не найдено — возвращается ошибка 404.
Если бы всё работало всегда именно так, то не было бы красивых и удобных для восприятия URL, которые используются на многих сайтах и в том числе и на этом. Для решения этой проблемы применяется модуль apache mod rewite. В этой статье мы рассмотрим как его включить и как он работает.
Если бы всё работало как описано выше, то при открытии ссылки https://losst.pro/kak-vklyuchit-apache-mod-rewrite в корневой директории сайта должен был бы существовать файл или скрипт с именем kak-vklyuchit-apache-mod-rewrite. Но это не так. При запросе этой URL веб-сервер действительно пытается найти такой файл, но когда он его не находит, вместо возвращения ошибки 404 передается управление модулю mod_rewrite, который для всех таких URL выполняет скрипт index.php передавая уже ему строку запроса после домена — /kak-vklyuchit-apache-mod-rewrite. А дальше уже PHP на основе этих данных находит и возвращает нужную страницу.
Для включения mod rewrite достаточно выполнить такую команду:
sudo a2enmod rewrite
А затем надо перезапустить веб-сервер:
sudo systemctl restart apache
Но то, что модуль включён на уровне веб-сервера Apache ещё не означает, что он будет работать для веб-сайта. Для этого его надо настроить в файле .htaccess, указать на какому скрипту передавать запросы к несуществующим страницам. Для того чтобы файл .htaccess работал, в секцию Directory виртуального хоста надо добавить директиву AllowOwerride: All. Например:
Далее, например, в WordPress надо добавить такие строки в файл .htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Весь код заключён в директиву IfModule она позволяет выполнять код внутри неё только когда модуль mod_rewrite включён, иначе эти строки просто игнорируются. Директива RewriteEngine On включает работу этого модуля для текущего каталога. Далее, с помощью RewriteBase / указывается, что необходимо передавать скрипту всю строку после домена. Дальше идут правила RwriteRule с условиями для них RewriteCond, которые выполняются последовательно, сверху вниз.
Первое правило RewriteRule ^index.php$ — [L] дословно сообщает, что если в URL содержится строка index.php, то надо переписать URL на /. Это простое регулярное выражение в котором указано начало и конец строки, а точка экранирована обратным слешем. Флаг [L] означает только то, что если URL совпала с этим правилом, то следующие правила проверять не стоит. После выполнения этого правила URL перепишется и веб-сервер будет считать, что получил запрос /, анализ правил начнётся сначала и на этот раз совпадёт с последним правилом.
Условия RewriteCond действуют на те правила, что идут сразу за ними. В данном случае — RewriteCond %{REQUEST_FILENAME} !-f и RewriteCond %{REQUEST_FILENAME} !-d позволяют последнему правилу выполнится только если URL — это не файл и не папка. А последнее правило, как вы уже поняли перенаправляет всё на скрипт ./index.php.
Если у вас что-то не получается в настройке mod_rewrite имеет смысл посмотреть что происходит внутри веб-сервера во время ваших редиректов. Для этого в конфигурацию виртуального хоста сайта, надо добавить такую строчку. Нарпимер:
sudo vi /etc/apache2/sites-available/001-texts.conf
LogLevel warn rewrite:trace4
Далее в лог файле, указанному в директиве ErrorLog вы увидите все попытки веб-сервера преобразовать URL по вашим правилам и сможете понять что вы делаете не так.
Выводы
В этой небольшой статье мы рассмотрели как включить mod rewrite Apache, а также как всё это работает и как искать ошибки. А что вы ещё хотели бы добавить в эту статью? Напишите в комментариях!
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .
Об авторе
Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.




