Возможно, лучший вопрос: есть ли способ использовать переменные сервера в соответствующей строке?htaccess RewriteCond: Почему переменная сервера не соответствует самому себе?
К примеру, я не могу понять, почему это не совпадает:
RewriteCond %{REQUEST_URI} %{REQUEST_URI}
Во-первых, две точки.
- Я знаю это состояние серверов без цели, как есть.
- Я знаю, что у меня плохое знание как htaccess, так и regex.
То, что я хочу, чтобы обобщенно превратить этот URL www.example.com/dir/path/info в www.example.com/dir?foo=/path/info для самонастройки.
Я попытался выполнить это, удалив дополнительную информацию о пути из самого глубокого фактического каталога в URL-адресе. Я пытался этот код проверить помещение:
RewriteEngine On
Options -Multiviews -Indexes +FollowSymLinks
RewriteBase/
DirectorySlash Off
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} (.+)%{PATH_INFO}
RewriteRule ^(.+?) index.php?dir=%1&path=%2 [L]
Не повезло. Чтобы устранить я свел его к этому:
RewriteCond %{PATH_INFO} (.+)
RewriteRule ^(.+?) index.php?dir=%1 [L]
Как и ожидалось, запрос возвращал Foo = «/ путь/данные»
Так что я попытался это, который я думал, что будет соответствовать ни на что: RewriteCond% {PATH_INFO }% {} PATH_INFO
Это не удалось, так как последняя попытка, я попытался захватить строку:
RewriteCond %{PATH_INFO} (.+)
RewriteCond %{PATH_INFO} %1
Это также не удалось найти матч, который имеет меня озадачило. % 1 должна быть полной строкой% {PATH_INFO}. Как он мог не соответствовать себе ???
Я не думаю, что это имеет значение, но я использую XAMPP для Windows7 в FastCGI.
спасибо. Это всеобъемлющий ответ, почему они не совпадают. Но я все еще удивлен тем, что не смог захватить строку с RewriteCond% {PATH_INFO} (. +), А затем передать строку с обратной ссылкой% 1. Таким образом, кажется, что нет абсолютно никакого способа, чтобы htaccess мог найти самый глубокий существующий каталог автоматически. Я считаю, что это так странно, потому что% {REQUEST_FILENAME} делает именно это. К счастью, у меня недостаточно волос, чтобы вырваться. –
@GregorMacgregor Предполагаемое использование PATH_INFO должно соответствовать всем значениям после имени сценария и перед запросом. Однако, я не вижу способ извлечь директорию сценария (если это то, что вы пытаетесь сделать?), Разобрав PATH_INFO. Тем не менее, нет четкой картины конечной цели, но я добавил еще два примера, чтобы ответить выше. –
Очевидно, я шел к нему назад. То, что я хотел, было способом разбить запрос пополам по имени сценария. Представьте себе это. www.example.com/dir/file.php/some/option. Это плохой URL-адрес, который возвращает 404. Я хотел поймать файл и переписать URL-адрес на www.example.com/dir/file.php?foo=/some/option. Таким образом, я мог бы использовать обычный бутстрап для моего основного index.php, но также добавлять специальные файлы и папки без изменения htaccess для каждой ситуации. –