Как использовать флаг Apache DPI для отбрасывания PATH_INFO в htaccess
Я занимаюсь разработкой веб-сайта Concrete5:
- Concrete5 - это PHP CMS с открытым исходным кодом.
- Он размещен на моем VPS (Debian 6, Apache 2.2.16 и PHP 5.4)
- Это URL-адрес разработки: http://www.test.mijn-teamuitje.nl/
- Он использует.htaccess по умолчанию, сгенерированный Concrete5
Моя проблема связана с правилами.htaccess и связана с этим: mod_rewrite 'добавить постфиксный путь информации:'
Эта проблема приводит к тому, что любой URL с index.php и конечными слешами идет на все 404. так что это работает: http://www.test.mijn-teamuitje.nl/teams Но это НЕ ДЕЛАЕТ: http://www.test.mijn-teamuitje.nl/index.php/teams
Однако мне удалось исправить это одной строкой:RewriteRule ^index.php/(.*)$ index.php [L,DPI] в.htaccess, так что теперь он работает, а 404 нет.
К сожалению, есть один недостаток, и это проблема: любой URL, сопоставленный с путём 'инструментов' Concrete5, загружается за 15 секунд, и я просто не могу понять, почему. Эти инструменты-URL загружают динамические ресурсы, такие как html или javascript, выводимые сервером. Вот пример: http://www.test.mijn-teamuitje.nl/index.php/tools/required/alert.php. Когда вы открываете страницу, эти URL-адреса вызываются в фоновом режиме с элементами сценария или ссылки. Страница загружается мгновенно, но ресурсы занимают вечность.
Я знаю, что это сложно, но если кто-то знает, просто посмотрев на мои переписанные тексты, почему это может быть проблемой, то я бы хотел услышать об этом.
Это мои рерайтеры из.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php\/(.*)$ index.php [L,DPI]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php
</IfModule>
Это htaccess по умолчанию из Concrete5, который обычно всегда работает. Строка, содержащая флаг DPI, является той, которую я добавил.
Судя по логам mod_rewrite, рекурсивного перенаправления не происходит. Это строки для URL http://www.test.mijn-teamuitje.nl/index.php/tools/required/alert.php
83.84.100.81 - - [16/Jul/2014:16:49:04 +0200] [www.test.mijn-teamuitje.nl/sid#7fe14d27a518][rid#7fe14d4f0b70/initial] (3) [perdir /var/www/nl.mijn-teamuitje-test/] add path info postfix: /var/www/nl.mijn-teamuitje-test/index.php -> /var/www/nl.mijn-teamuitje-test/index.php/tools/required/alert.php
83.84.100.81 - - [16/Jul/2014:16:49:04 +0200] [www.test.mijn-teamuitje.nl/sid#7fe14d27a518][rid#7fe14d4f0b70/initial] (3) [perdir /var/www/nl.mijn-teamuitje-test/] strip per-dir prefix: /var/www/nl.mijn-teamuitje-test/index.php/tools/required/alert.php -> index.php/tools/required/alert.php
83.84.100.81 - - [16/Jul/2014:16:49:04 +0200] [www.test.mijn-teamuitje.nl/sid#7fe14d27a518][rid#7fe14d4f0b70/initial] (3) [perdir /var/www/nl.mijn-teamuitje-test/] applying pattern '^index\\.php\\/(.*)$' to uri 'index.php/tools/required/alert.php'
83.84.100.81 - - [16/Jul/2014:16:49:04 +0200] [www.test.mijn-teamuitje.nl/sid#7fe14d27a518][rid#7fe14d4f0b70/initial] (2) [perdir /var/www/nl.mijn-teamuitje-test/] rewrite 'index.php/tools/required/alert.php' -> 'index.php'
83.84.100.81 - - [16/Jul/2014:16:49:04 +0200] [www.test.mijn-teamuitje.nl/sid#7fe14d27a518][rid#7fe14d4f0b70/initial] (3) [perdir /var/www/nl.mijn-teamuitje-test/] add per-dir prefix: index.php -> /var/www/nl.mijn-teamuitje-test/index.php
83.84.100.81 - - [16/Jul/2014:16:49:04 +0200] [www.test.mijn-teamuitje.nl/sid#7fe14d27a518][rid#7fe14d4f0b70/initial] (1) [perdir /var/www/nl.mijn-teamuitje-test/] initial URL equal rewritten URL: /var/www/nl.mijn-teamuitje-test/index.php [IGNORING REWRITE]
Буду очень признателен за любую помощь, я буду заниматься этим весь день сейчас!
2 ответа
Вместо того, чтобы пытаться отключить всю информацию PATH, вы можете сделать это только для вызовов, а не для инструментов?
RewriteRule ^index\.php/(?!tools) index.php [L,DPI]
Я закрываю этот вопрос. В правиле перезаписи не было ничего плохого. Apache просто глючил, возможно потому, что я (неправильно) установил PHP 5.4 на Debian6. Я установил Debian 7, который решил мои проблемы.
Использование флага DPI в моем вопросе правильно, попробуйте, если у вас возникли проблемы с PATH_INFO.