标签: rewrite

Nginx 变量中 Uri 的一部分

我想将 nginx 中 URI 的一部分放入变量中。目前我有这条规则。

if ( !-e /tmp/access_22092012_$cookie_PHPSESSID.tmp ) {
        rewrite /folder1/folder2/(.*) /folder1/folder1.php?file=$1 last;
}
Run Code Online (Sandbox Code Playgroud)

请求就像

http://my.domain/folder1/folder2/22092012/index.html

http://my.domain/folder1/folder2/22092012/files/x.sfw

其中22092012也可以有其他数字。

我想22092012从 URL 中提取部分并将其放入变量中,然后文件中的内容存在上面的条件:

if ( !-e /tmp/access_$urlpart_$cookie_PHPSESSID.tmp ) {
        rewrite /folder1/folder2/(.*) /folder1/folder1.php?file=$1 last;
}
Run Code Online (Sandbox Code Playgroud)

为什么我需要这个:我设置了登录保护来通过会话登录来保护文件。我的应用程序写入 tmp 文件,因此如果文件夹中有 100 个文件,则脚本不需要验证每个文件是否具有权限,也不需要为每个文件运行 php 工作程序。

这可能吗?

rewrite nginx

3
推荐指数
1
解决办法
2631
查看次数

使用 nginx 在一个路径/位置提供多个目录

我一直在尝试在一个位置提供多个目录,以便所有文件都可以在 /sys/assets/--FILE-- 上访问,无论文件在以下文件夹中的物理位置如何

location /sys {
    alias /var/www/website_api/sys/public;
    try_files $uri $uri/ /sys/index.php$is_args$args;
    location ~ \.php {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    include /etc/nginx/fastcgi_params;
    }
        location /sys/assets {
           alias /var/www/website_api/sys/app/assets/javascripts/;
        }
        location /sys/assets {
           alias /var/www/website_api/sys/app/assets/stylesheets/;
        }
        location /sys/assets {
           alias /var/www/website_api/sys/app/assets/images/;
        }
}
Run Code Online (Sandbox Code Playgroud)

目标:

/sys/assets/javascriptFile.js
/sys/assets/stylesheetFile.css
/sys/assets/image.png
Run Code Online (Sandbox Code Playgroud)

rewrite nginx

3
推荐指数
1
解决办法
3万
查看次数

Nginx重写规则403错误

我在将 .htaccess 文件转换为 nginx 时遇到问题。我有 3 个 .htaccess 文件。第一个 .htaccess 文件位于文档根目录中,如下所示:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^img-(.*)\.html img.php?id=$1 [L]
RewriteRule ^slide-(.*)\.html slider.php?id=$1 [L]
RewriteRule ^page-(.*)\.html page.php?name=$1 [L]
RewriteRule ^contact\.html$ contact.php [QSA,L,NC]
Run Code Online (Sandbox Code Playgroud)

第二个 .htaccess 文件位于名为 upload 的文件夹中:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?foo\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ nohotlink.gif [L]
<Files ~ "\.(php|sql|php3|php4|phtml|pl|py|jsp|asp|htm|shtml|sh|cgi)$">
  order allow,deny
  deny from all
</Files>
Run Code Online (Sandbox Code Playgroud)

第三个也是最后一个 .htaccess 文件位于名为“small”的上传文件夹的子目录中:

RewriteEngine Off
Run Code Online (Sandbox Code Playgroud)

现在我在 /etc/nginx 中创建了一个文件夹,名为 includes 并使用这些重写规则制作了 3 个单独的 .access 文件:

对于位于文档根目录中的第一个 .htaccess 文件,我在 /etc/nginx/includes 中创建了一个名为 root.access 的文件。在这个文件中,我有:

# …
Run Code Online (Sandbox Code Playgroud)

rewrite nginx .htaccess

3
推荐指数
1
解决办法
3651
查看次数

将 ASCII 百分比编码的位置重写为其 UTF-8 编码的等效项

例如,“å”可以编码为 /%E5 和 /%C3%A5 (utf-8)。我所有的文件名都是 UTF-8,所以 ASCII 变体返回 404。我希望这两个变体都能工作。

我尝试使用以下配置的变体将不正确的 URL 重写为正确的编码。我无法真正匹配这些位置,所以没有到达任何地方。

rewrite ^/%E5$ /%C3%A permanent;
rewrite ^/%25E5$ /%25C3%25A permanent;
location = /%E5 { return 301 /%C3%A; }
Run Code Online (Sandbox Code Playgroud)

我应该如何匹配这些百分比编码的位置?

rewrite nginx utf-8

3
推荐指数
1
解决办法
3010
查看次数

将 www 重定向到非 www(apache、letsencrypt)

Ubuntu 14.04 Apache 2.4.18

我已经使用 letencrypt 设置了 SSL 证书。它运行良好,但为了工作,我不能在一个虚拟主机配置文件中定义多个虚拟主机。每个虚拟主机都必须位于 /etc/apache2/sites-available 内的自己的 .conf 文件中。

我需要确保对 www.example.com 的所有请求都重定向到 example.com。由于我需要在唯一的虚拟主机文件中解决它,我试图在里面包含一个重写规则来执行重定向,但到目前为止它无声地失败了:所有https://www.example.com请求都没有被重定向到https ://example.com并显示“不安全的网站”警告。

这是 domain.com-le-ssl.conf 的虚拟主机配置文件。

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName example.com
        ServerAlias www.example.com

        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
        RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]

        DocumentRoot /home/user_account/www/example.com/public
        <Directory /home/user_account/www/example.com/public>
                Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

        ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/home/user_account/www/example.com/public/$1

SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

rewrite ssl-certificate apache-2.4 lets-encrypt

3
推荐指数
1
解决办法
2753
查看次数

清理 nginx 上的 URL 和 php 扩展

我在网上查看了许多其他问题和参考资料 - 根据我的所有计算,我的设置应该有效,但事实并非如此。

我使用 php-fpm 安装了 nginx。如果我尝试访问 .php 文件,它会正确运行并得到正确的结果。我在我的配置文件中得到了这个:

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}
Run Code Online (Sandbox Code Playgroud)

现在,我想设置我的网络应用程序,以便在仍显示在浏览器地址栏中的同时/somedir/file自动执行。所以我修改了我的配置以包含以下内容:/somdir/file.php/somdir/file

location / {
    try_files $uri $uri/ $uri.php?query_string
}
Run Code Online (Sandbox Code Playgroud)

类型的作品,那就是服务器做访问的PHP文件。然而,它没有使用location ~ \.php$上面现有的块来执行它,而是简单地将 php 源代码作为下载到浏览器中。如果我将 .php 手动附加到请求的 URL,则执行 php。

感觉好像一旦服务器匹配try_files$uri.php,它就不会在位置上再执行一次以查看它需要对 php 文件做什么。我尝试将 php 块放在 的上方和下方location /,但没有任何区别。

我怎样才能让php被执行?

php rewrite nginx

3
推荐指数
1
解决办法
9252
查看次数

Nginx - 用重写的 URL 填充 REQUEST_URI

我有一个 Nginx 配置,用于新的 PHP 应用程序,该应用程序具有与另一个旧 PHP 应用程序相同的功能,但 URL 不同。

我想保留旧的应用程序的路径,取代了/foo与路径前缀/page和更换特殊的路径/foo/bar/page/otherBar

    # legacy support
    location ~ ^/foo/bar {
        rewrite /foo/bar /page/otherBar$1 last;
    }

    # How to rewrite all other pages starting with "/foo" ?

    # END legacy support

    location / {
        # try to serve file directly, fallback to front controller
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/index\.php(/|$) {
        proxy_read_timeout 300;
        include        fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param  SCRIPT_FILENAME /usr/share/nginx/www/$fastcgi_script_name;
        fastcgi_param  PATH_INFO       $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED …
Run Code Online (Sandbox Code Playgroud)

rewrite nginx php-fpm

3
推荐指数
1
解决办法
1万
查看次数

在 apache 中删除目录的尾部斜杠

www.example.com/advice/现在有以下网址注意到网址末尾的斜杠了吗?我希望将其删除为类似www.example.com/advice. 现在,当我在浏览器中输入该 URL 时,我会被重定向到带有尾部斜杠的 URL,例如使用 curl 也是如此。现在我知道尾部斜杠被添加了,因为建议是一个实际的目录。

[steve@dev dev.www.example.com]$ curl -I  https://dev.www.example.com/advice -k
  HTTP/1.1 301 Moved Permanently
  Date: Fri, 25 Nov 2016 08:20:11 GMT
  Server: Apache/2.4.6 (CentOS)
  Location: https://dev.www.example.com/advice/
  Cache-Control: max-age=0
  Expires: Fri, 25 Nov 2016 08:20:11 GMT
  Connection: close
  Content-Type: text/html; charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud)
[steve@dev dev.www.example.com]$ curl -I https://dev.www.example.com/advice/ -k
HTTP/1.1 200 OK
Date: Fri, 25 Nov 2016 08:21:19 GMT
Server: Apache/2.4.6 (CentOS)
X-Powered-By: PHP/5.6.27
Set-Cookie: flarum_session=mfbou2hcbvcobhncnaqlvl9bm7; Path=/; HttpOnly
X-CSRF-Token: WV69M1oi8POqOcXi6MvwKhbJQ72Tmo2WpFn3oxwq
Content-Length: 10339
Cache-Control: max-age=0
Expires: Fri, …
Run Code Online (Sandbox Code Playgroud)

mod-rewrite rewrite .htaccess rewritecond apache2

3
推荐指数
1
解决办法
6195
查看次数

我需要使用多个 ssl 端口配置 haproxy

我有两台具有相同 URL 的服务器,但端口号可能会更改。

我想重定向这两个 URL HTTPS。

如果我输入我的第一个 URL ( http://example.com) 那么我希望它会重定向到https://example.com.

如果我输入第二个 URL ( http://example.com:8080) 然后我希望它重定向到https://example.com:8080.

查看我的配置:

frontend www-HTTP
  bind *:80
  bind *:443 ssl crt /etc/apache2/ssl/apache.pem
  reqadd X-Forwarded-Proto:\ https
  default_backend tcp-backend
  mode tcp

frontend TCP-HTTP
  bind *:8080
  bind *:8443 ssl crt /etc/apache2/ssl/paritech.pem
  reqadd X-Forwarded-Proto:\ https
  default_backend www-backend
  mode tcp

backend www-backend
  redirect scheme https if !{ ssl_fc }
  server dev.example.com 192.168.1.120:8080 check

backend TCP-backend
  redirect scheme https if !{ ssl_fc }
  server qa.example.com 192.168.1.120:80 …
Run Code Online (Sandbox Code Playgroud)

rewrite url haproxy

3
推荐指数
1
解决办法
5929
查看次数

使用 UrlRewrite 防止 ARR 重写 302 重定向的 Location 标头

我正在尝试使用 ARR 和 urlrewrite 部署 jetty servlet 来创建反向代理。如果我启用“在响应标头中反向重写主机”,那么一切似乎都工作正常。我通过 www.example.com/servlet 访问 servlet,该地址在浏览器中保持不变,但通过 localhost:8080 访问 servlet。

问题是该 servlet 根据 get 参数返回 302 重定向。例如,如果我访问 www.example.com/servlet?input=cleaning 那么我将得到一个 302 重定向,该重定向可能会访问 www.cleaningexample.com/howtoclean。反向重写主机规则意味着客户端不会看到此 url,而是返回 www.example.com/howtoclean。

我无法设置静态出站规则,因为我事先不知道 302 重定向可能返回哪个地址。

如果我禁用反向重写主机,则浏览器中的 URL 将从 www.example.com/servlet 更改为 localhost:8080/servlet。

我尝试替换出站规则中的主机,但找不到任何地方可以获取 servlet 返回的原始位置标头,以替换重写的位置主机。

有没有办法让它正常工作?

iis rewrite reverse-proxy arr

3
推荐指数
1
解决办法
5944
查看次数