Ответ 1
Оказывается, что имеет значение, поставил ли я ведущий/перед index.php или нет. Оставляя это, script работает правильно. Я тестировал флаг R, который использовал физические каталоги при перенаправлении.
Я хочу использовать mod_rewrite для создания симпатичных URL-адресов, но имею одну версию файла .htaccess, которая может использоваться для любого пользователя на сервере.
Пока у меня есть стандартный довольно URL-адрес .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
В идеале, мне бы хотелось что-то похожее на
RewriteRule ^(.*)$ %{URL of this file directory}/index.php/$1 [L]
Эта документация заставила бы меня поверить, что я не хочу:
Примечание. Сравнение шаблонов в контексте для каждого каталога Никогда не забывайте, что шаблон применяется к полному URL-адресу в конфигурационных файлах на сервере. Однако в файлах конфигурации для каждого каталога префикс для каждого каталога (который всегда один и тот же для определенного каталога) автоматически удаляется для сопоставления шаблонов и автоматически добавляется после того, как была выполнена замена. Эта функция необходима для многих видов перезаписи - без этого вам всегда приходилось сопоставлять родительский каталог, который не всегда возможен.
Я все равно получаю неправильный результат, независимо от того, помещаю ли я/перед индексом index.php в RewriteRule.
Это,
http://server/test/stream/stream
превращается в
http://server/index.php/stream
не
http://server/test/index.php/stream
когда файл .htaccess находится в/test/.
Оказывается, что имеет значение, поставил ли я ведущий/перед index.php или нет. Оставляя это, script работает правильно. Я тестировал флаг R, который использовал физические каталоги при перенаправлении.
У меня была аналогичная проблема, но я обнаружил, что просто выключение корня '/' привело к тому, что мой тестовый веб-сервер (xampp on windows) показал URL-адрес, похожий на:
Не идеально. Мое решение - использовать RewriteCond для извлечения пути из REQUEST_URI. Вот пример удаления нежелательных "index.php" с конца URL-адреса:
RewriteCond %{REQUEST_URI} ^(.*)/index.php$
RewriteRule index.php %1/ [r=301,L]
Примечание: знак процента в "% 1/", а не знак доллара.
% 1-% 9 получает шаблоны из последнего совпадающего RewriteCond, $1- $9 получает шаблоны из RewriteRule.
См: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond
Приветствия:)