2016-03-01 6 views
3

Я получил эту HTAccess в dir1:Pass путь полный файл PHP, даже если каталог не существует

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ missingFileHandler.php?location=%{REQUEST_FILENAME} [L] 

Когда я посещаю:

http://example.com/dir1/dir2/dir3/file.txt 

Значение $ _GET [ 'местоположения «] отлично:

/path-to-www/dir1/dir2/dir3/file.txt 

Однако, если некоторых из них dir1, dir2 или dir3 не существует, я не получаю полный путь, например, при посещении:

http://example.com/dir1/missingdir2/dir3/file.txt 

Значение $ _GET [ 'место'] отсутствует остальное:

/path-to-www/dir1/missingdir2 

Как я могу получить полный путь в обоих случаях?

Note:

Он не должен быть полный путь к серверу или полный URL. Все я действительно интересует эта часть: dir1/dir2/dir3/file.txt

+1

Не можете использовать '% {REQUEST_URI}' вместо '% {REQUEST_FILENAME}'? –

ответ

1

Вы можете использовать следующее:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ missingFileHandler.php?location=$1 [L] 
+1

Это прекрасно работает, спасибо. Не могли бы вы объяснить бит '^ (. +) $'? Я раньше делал '$ 1', но я получал пустую строку в $ _GET ['location']. –

+1

^(. +) $ (Группа захвата Regex) соответствует любому запросу, который не является реальным файлом и dir, и сохраняет зафиксированное значение как $ 1. – starkeen

Смежные вопросы