Я пробовал просмотреть некоторые из вопросов mod_rewrite на сайте, но не нашел ответа на моя проблема (то, что большинство вопросов называлось «mod_rewrite не работает», не помогло сделать эту задачу легче, надеюсь, мой заголовок немного полезнее).mod_rewrite в .htaccess, go/*, go ?, go?/* Work, но go /? * Не
это содержание моего /somepath/.htaccess:
RewriteEngine On
RewriteRule ^go/(.*) /cgi-bin/goto.cgi?$1
# ^^^ WORKS: /somepath/go/200001..
RewriteRule ^go?(.*) /cgi-bin/goto.cgi$1
# ^^^ WORKS: /somepath/go?200001..
ErrorDocument 404 /cgi-bin/goto.cgi?error404
Во время тестирования я сделал goto.cgi просто вернуть $ ENV {QUERY_STRING}, $ ENV {QUERY_STRING_UNESCAPED} и $ ENV {PATH_INFO} , В настоящее время, вышеуказанные правила означают, что я набираюсь QUERY_STRING передается правильно, когда URLs:
/somepath/go/200001
/somepath/go?200001
/somepath/go?/200001
доступны, но не тогда, когда
/somepath/go/?200001
доступ, в этом случае $ ENV {QUERY_STRING} , $ ENV {QUERY_STRING_UNESCAPED} и $ ENV {PATH_INFO} пустые.
Таким образом, вопрос, какие правила можно использовать так, чтобы
/somepath/go/?200001
дает мой сценарий? Существуют 200001 или даже /? 200001 часть обратно?
Для дополнительного удовольствия и путаницы, перейдите в '/ somepath/getconfused' и удивляются, почему сервер жалуется, что'/CGI-BIN/goto.cgietconfused' не существует ;-) – Sumurai8
@ Sumurai8 хе, да, Я упомянул об этой проблеме в комментариях к ответу. Спасибо за головы, хотя. – insaner