как я могу принудительно обрабатывать /ih/ как php-скрипт

У меня есть множество сценариев index.php, использующих удобный для SEO формат аргументов, например

example.com/path/to/index.php/opt/arg

и хотел бы переписать или заставить обработчик иметь

example.com/path/to/ih/opt/arg

и, таким образом, сократить часть index.php. [Ну, я хотел бы избавиться от него полностью, но не хочу возвращаться к

example.com/path/to/?opt&arg

format.] Обычно это должно поддерживаться в любом каталоге на сайте, а не требовать изменения .htaccess, псевдонима или http.conf. Для моего следующего трюка я расширим «ih» для PHP, чтобы также охватить «ip» для Perl, «ir» для Ruby, «iy» для Python и, возможно, другие. [Моя первоначальная мысль была просто «i», но потом я понял, что есть и другие языки, для которых я тоже хочу это.]

Я пробовал играть с MultiViews, но явно не знаю, что делаю :-) Я внимательно изучил mod_rewrite, но просто не вижу, как реализовать что-то подобное. Я бегло взглянул на форсирование обработчика, но 1) не уверен, что это действительно то, что я имею в виду (и поэтому заранее прошу прощения за, возможно, использование неправильного термина) и 2) есть дополнительная забавная задача запуска 1.3, где я хост против 2.2 дома :-)

Предложения?

ТИА и РУКА

:-D

Дэвид Т-Г http://justpickone.org/davidtg/email/


person david t-g    schedule 16.06.2011    source источник


Ответы (1)


Поскольку вы изучали использование mod_rewrite, я предполагаю, что вы не возражаете против одноразового изменения .htaccess или httpd.conf, но просто не хотите делать это для каждого index.php на вашем сайте. (Поправьте меня если я ошибаюсь!)

Попробуй это:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*\/)?ih(\/.*)?$ $1index.php$2 [L,QSA]

Возможно, вам не понадобятся два RewriteCond. Они просто проверяют, что исходный URL-адрес не существует как реальный файл в системе, прежде чем переписывать этот URL-адрес.

person antinome    schedule 16.06.2011
comment
Спасибо за ответ! Я попробовал это, но теперь получаю сообщение об ошибке сервера, а запрос превышает ограничение в 10 уровней вложенности подзапросов из-за вероятной ошибки конфигурации. в моем журнале. Мысли? - person david t-g; 16.06.2011
comment
Что еще у вас есть в .htaccess и httpd.conf? Я попробовал это на своей учетной записи общего хостинга, и, похоже, это сработало, так что, может быть, у вас где-то есть другое правило перезаписи, которое взаимодействует, чтобы вызвать цикл? - person antinome; 17.06.2011
comment
Привет еще раз! В файле .htaccess ничего нет, и вы можете перейти на justpickone.org/davidtg/private/rewrites чтобы увидеть мой httpd.conf и включенный файл testme.conf. Я пробовал со вторым блоком ‹Directory› и без него, без изменений. Большое спасибо, еще раз! - person david t-g; 20.06.2011
comment
Я попробовал ваши файлы конфигурации на свежей установке Apache и PHP в Windows, используя hello world test/index.php, и не смог увидеть ошибку. Я думаю, вам лучше всего попробовать то же самое, и если он работает для вас со всеми настройками по умолчанию, то постепенно добавляйте вещи (конфигурацию сервера, части вашего PHP-скрипта), пока он не сломается. Это могло бы его сузить... Я сам недостаточно знаю, чтобы диагностировать его, не проводя подобных экспериментов. Удачи! - person antinome; 21.06.2011
comment
Большое спасибо, Антином. Я попробую это, как только смогу, и вернусь! - person david t-g; 23.06.2011
comment
Привет! Во-первых, еще раз спасибо, и я должен антиному за отзыв, так как я действительно смог заставить это работать, вроде как. Я использую псевдонимы в своей локальной установке, и мне пришлось сбросить мой DocRoot на c:/, чтобы действительно заставить все работать. Впрочем, это отдельный вопрос :-) - person david t-g; 30.06.2011