Конвертируйте это переписывание Apache в правила Nginx - PullRequest
1 голос
/ 20 ноября 2011

Мне нужно преобразовать эти правила .htaccess в правила nginx:

RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ navigation.php
RewriteRule .* - [E=HTTP_X_REQUESTED_WITH:%{HTTP:X-Requested-With}]

Я использовал этот инструмент онлайн-конвертации, который дает:

if (!-f $request_filename){
    set $rule_0 1$rule_0;
}
if (!-d $request_filename){
    set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
    rewrite ^/(.*)$ /navigation.php;
}
     HTTP_X_REQUESTED_WITH:$http_x_requested_with;
#ignored: "-" thing used or unknown variable in regex/rew 

Однакорезультат не может быть использован в nginx 0.76, и я получил сообщение об ошибке:

unknown directive "setenv" 

. И когда я удаляю последнюю строку из моего конфига nginx, скрипт не показывает некоторые страницы.

Так что я действительно ценю, если бы вы могли сделать преобразование.

1 Ответ

1 голос
/ 20 ноября 2011

С Nginx вам не нужно заново отображать точно так, как вы это делали в Apache.

Вы когда-нибудь читали страницу IfIsEvil nginx?

Чтобы проверитьФайл не является статическим файлом или каталогом до применения правила в nginx. На самом деле простой способ - это не мульти-если, как вы, а директива try_file ( проверить, существует ли файл на странице-ловушке ).

Итак, вам следует начать с этого «правила»:

server {
  root /var/www/domain.com;
  location / {
    HTTP_X_REQUESTED_WITH:$http_x_requested_with;
    try_files $uri $uri/ /navigation.php;
  }
}

Теперь у вас есть, возможно, несколько других мест для обработки PHP-файлов через fastcgi, это, возможно, реальное место, где вам нужно передать HTTP_X_REQUESTED_WITH какfastcgi_param.

...