удаление расширения файла с ошибкой htaccess - PullRequest
0 голосов
/ 01 сентября 2011

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

вот htaccess:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

это берет URL-адрес, подобный этому, www.example.com/services и пытается указать его на /n/c/example.com./public/service.php

Я знаю, что {REQUEST_FILENAME} предполагает полный путь к локальной системе, но я не понимаю, почему он не находит файл.я очень мало знаю о htaccess и mod_rewriting, так что я не совсем уверен, что я должен пытаться сделать так, чтобы все основывалось только на пути URL, или если есть лучшее решение.Я действительно открыт для предложений.

Любая помощь будет принята с благодарностью.

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 сентября 2011

Использование RewriteRule .* %{REQUEST_URI}.php [L]

Трудно сказать, почему ваше правило не сработало для вас, имея так мало информации о вашей настройке Apache и любых других правилах перезаписи, которые у вас могут быть.

Вполне возможно, что флаг [L] сработал для вас - у вас могут быть другие правила переписывания, которые переписывают этот URL дальше, что в итоге приводит к неверному результату.Я не думаю, что %{REQUEST_URI} проделал такую ​​большую работу сам по себе, если только у вас нет символических ссылок / псевдонимов или даже прозрачного прокси, которые могут иметь значение.

Имейте в виду, чтоправила, которые вы указали в своем вопросе, не могут генерировать такого рода URL, которые будут видны в адресной строке браузера (example.com//service.php/) - это должен быть задействованный редирект (код 3xx) ... который предполагает, что у вас где-то есть другие правила.

Скорее всего, это комбинация ваших специфических настроек Apache и логики комбинированных правил перезаписи (где флаг L может иметь большое значение в зависимости от этих других правил).

Единственный способчтобы дать более точный ответ, включите отладку перезаписи и проанализируйте, как была выполнена перезапись и что в ней было задействовано.

0 голосов
/ 01 сентября 2011

Вы включили mod_rewrite на другом сервере?AddModule mod_rewrite, я думаю.

Также - более вероятно - вы включили .htaccess?Для этого вам понадобится

AllowOverride All

или

AllowOverride FileInfo

.

Эти директивы должны быть в конфигурационных файлах apache (обычно / etc / httpd/conf/httpd.conf или один из файлов в /etc/httpd/conf.d), и вам потребуется перезапустить apache, чтобы они вступили в силу.

...