Скажем, у меня есть переписывание, которое должно передать URL-адрес функции PHP и получить значение, чтобы определить, каким должно быть новое место назначения? Есть ли способ сделать это?
Благодарю.
ОБНОВИТЬ:
Спасибо, ребята. У меня все еще есть проблемы, но я покажу вам свой код:
#I got the file path by echoing DOCUMENT_ROOT and added the rest. RewriteMap fixurl prg:/var/www/vhosts/mydomain.com/httpsdocs/domain_prototype/code_base/url_handler.php RewriteEngine On RewriteRule (.*) ${fixurl:$1} [PT]
PHP:
set_time_limit(0); # forever program! $keyboard = fopen("php://stdin","r"); while (1) { $line = trim(fgets($keyboard)); print "www.google.com\n"; # <-- just test to see if working. }
Однако я получаю 500 внутренних ошибок сервера. Я не уверен, есть ли ошибка в моем .htaccess или на моем PHP?
Есть что-то, называемое RewriteMap.
Вы можете вызвать исполняемый скрипт, который вернет URL для перезаписи.
Ознакомьтесь с этой статьей для получения дополнительной информации и примеров (в Perl, но они полностью применимы к любому другому языку):
http://www.onlamp.com/pub/a/apache/2005/04/28/apacheckbk.html
Резюме оговорок:
Это способ создания карты
RewriteMap fixurl prg:/usr/local/scripts/fixit.php
И теперь мы можем использовать его в RewriteRule:
RewriteEngine On RewriteRule (.*) ${fixurl:$1}
EDIT: О внутренней ошибке сервера. Наиболее вероятная причина в том, что упоминает Gumbo, RewriteMap, к сожалению, нельзя использовать в .htaccess. Вы можете использовать его в RewriteRule в .htaccess, но можете создавать его только в конфигурации сервера или конфигурации виртуального хоста. Чтобы убедиться, проверьте журнал ошибок.
Таким образом, единственным решением для PHP / .htaccess было бы переписать все на определенную программу PHP, которая выполняет проверку и перенаправление с использованием заголовка Location. Что-то вроде:
RewriteRule (.*) proxy.php?args=$1 [QSA]
Затем в proxy.php
<?php $url = get_proper_destination($QUERY_STRING); #args will have the URI path, #and, via QSA you will have #the original query string header("Location: $url"); ?>
Да; вам нужна RewriteMap , из разновидности программ внешней перезаписи.
То, что я сделал бы, это передать URL-адрес на страницу PHP, а затем выполнить окончательное перенаправление, используя опцию заголовков PHP.
header("Location: new-page.php");
Если вы не хотите, чтобы он перенаправлялся, вы также могли бы включить включение нужной вам страницы. Я считаю, что это немного более гибко, чем использование RewriteMap.
Надеюсь это поможет!
Обратите внимание RewriteMap
директива RewriteMap
может использоваться только в конфигурации сервера или виртуального хоста .