HTACCESS REQUEST_URI без имени файла - PullRequest
0 голосов
/ 07 марта 2012
RewriteEngine On
RewriteCond %{REQUEST_URI} !(images)
RewriteRule ^(.*)\.(txt|rtf|docx?|odt|pdf|bmp|gif|jpe?g|png|tiff?)$ http://%{SERVER_NAME}/~abc123/uploader/process.php [nc]

Есть ли способ не заключать в кавычки ~abc123/uploader, а модифицировать мое регулярное выражение так, чтобы request_uri без имени файла динамически передавался?

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

То, что я пытаюсь сделать, - это убедиться, что определенные типы файлов обрабатываются PHP-скриптом и не могут быть доступны напрямую.

Ответы [ 2 ]

0 голосов
/ 08 марта 2012
RewriteEngine On
RewriteBase   /
RewriteCond   %{REQUEST_URI}        ^(?!images)(.*)/[-\w\.]*$
RewriteRule   ^(.*)\.(txt|rtf|docx?|odt|pdf|bmp|gif|jpe?g|png|tiff?)$   http://%{SERVER_NAME}/%1/process.php [NC,L]

будет делать то, что вы просите. (?! ...) является негативным взглядом, т. Е. Не включает изображения. Бит [- \ w.] * $ Будет соответствовать обычным именам файлов. Что я не понимаю, так это то, что http://%{SERVER_NAME}/... перенаправление без [R] - это просто нормальное внутреннее переписывание, почему вы не просто делаете

RewriteRule  ^(?!images)(.*)/[-\w]*\.(?:txt|rtf|docx?|odt|pdf|bmp|gif|jpe?g|png|tiff?)$  $1/process.php [NC,L]

без каких-либо conds или

RewriteCond  %{REQUEST_URI} !^images
RewriteCond  %{REQUEST_URI} (txt|rtf|docx?|odt|pdf|bmp|gif|jpe?g|png|tiff?)$
RewriteRule  ^(.*)/.*       $1/process.php [NC,L]

, если вы хотите, чтобы его было легче понять.

0 голосов
/ 07 марта 2012

Вот две подсказки, которые могут вам помочь:

Во-первых, вы можете использовать эти ключевые слова в своем регулярном выражении (я позволю вам Google для получения дополнительной информации): %{SCRIPT_FILENAME} и %{REQUEST_URI}

Во-вторых, вот пример того, как его использовать:

 # (1) if domain name is static:
 RewriteCond %{HTTP_HOST} ^(.*)\.s\.(.*) [NC,OR]
 RewriteCond %{HTTP_HOST} ^(.*)\.static\.(.*) [NC]
 # (2) and it's not the JavaScript directory:
 RewriteCond %{REQUEST_URI} !^/js/(.*)$
 # (3) *always* add /templates/ (if not there):
 RewriteRule /(templates/)*(.*) /templates/$2 [L]

И некоторые люди знают, что вы даже можете изменить целое имя файла целиком таким образом (примечание: переменные STATIC и PATH_LOCAL - это переменные среды, которые я вычислил несколькими шагами ранее):

# If static...
RewriteCond %{ENV:STATIC} 1
# ...first test to see if the file exists in the language path:
RewriteCond %{DOCUMENT_ROOT}/%{ENV:PATH_LOCAL}/%{ENV:EXT}%{REQUEST_FILENAME}  -f  
# It exists => rewrite filename then end:
RewriteRule  ^(.+) %{DOCUMENT_ROOT}/%{ENV:PATH_LOCAL}/%{ENV:EXT}%{REQUEST_FILENAME} [QSA,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...