基于子字符串的nginx重写URL -- nginx 领域 和 wordpress 领域 和 url 领域 服务器管理 相关 的问题

nginx rewriting url based on substring


0
vote

问题

中文

我有一个php脚本,它依赖于读取URL来执行必要的操作,因此我需要将用户重定向到

example.com/pl/[User-id-or-name] example.com/pl.php/[User-id-or-name]

我用一个简单的.htaccess规则来做,

  Options +FollowSymLinks +MultiViews RewriteRule ^pl/?$ lp.php [NC]   

并尝试通过使用nginx在nginx中做同样的事情

  Postfix0  

它有点作品,如果我转到 Postfix1 然后它向我展示 Postfix2 文件只需很好,但如果我添加用户标识或名称,那么它将我重定向到未找到的WordPress "页面" 页面。

我做错了什么?

英文原文

I have a php script that relies on reading the url to perform it's necessary actions, so I need to redirect the users coming to

example.com/pl/[User-id-or-name] to example.com/pl.php/[User-id-or-name]

I was doing that with a simple .htaccess rule

Options +FollowSymLinks +MultiViews RewriteRule ^pl/?$ lp.php [NC] 

And tried doing the same thing in nginx by using

location ^//pl//?$ {     rewrite ^//pl//?$ /pl.php; } 

It sort of works, if I go to mydomain.com/pl/ Then it shows me the pl.php file just fine, but if I add an user ID or name, then it redirects me to a Wordpress "page not found" page.

What am I doing wrong?

        

回答列表

0
 
vote
vote
最佳答案
 

首先,不需要双斜线。 regexp /etc/pki/tls/private/localhost.key1 将只匹配 /etc/pki/tls/private/localhost.key2 /etc/pki/tls/private/localhost.key3

您可以通过简单地纠正 abcdefghijklmn14 中的表达式并修复 /etc/pki/tls/private/localhost.key5

  /etc/pki/tls/private/localhost.key6  

需要更少的配置的更好的替代方法是将重写放在 /etc/pki/tls/private/localhost.key7 块中。

  /etc/pki/tls/private/localhost.key8  

请参阅: https://nginx.org/en/docs/http/ngx_http_rewrite_module .html

 

Firstly, the double slashes are not needed. The regexp ^/pl/?$ will only match /pl and /pl/.

You can fix this by simply correcting the expression in the location and fixing the rewrite.

location ~ ^/pl(/.*)$ {     rewrite ^/pl(/.*)$ /pl.php$1 break;     return 403; } 

A better alternative requiring less configuration is to put the rewrite in the server block.

server {     [...]     rewrite ^/pl(/.*)$ /pl.php$1 last;     [...] } 

See: https://nginx.org/en/docs/http/ngx_http_rewrite_module.html

 
 
0
 
vote

为什么两个斜线而不是一个斜线?此外,您正在使用非正则表达式的Regexp-syntax,这就是为什么它"有序" 的工作原理。最后,您缺少虚拟路径的重写。

考虑到上述所有内容,我将尝试使用以下位置块:

  /etc/pki/tls/private/localhost.key9  
 

Why two slashes instead of one ? Plus, you're using a regexp-syntax in non-regexp-location, that's why it "sort of" works. Finally, you're missing a rewrite for virtual paths.

Considering all of the above, I would try using the following location block:

location / {     if (!-e $request_filename) {         rewrite ^/(.*)$ /pl.php;     } } 
 
 
         
         
0
 
vote

这是我如何解决问题的方式
mod_ssl0
是的,只是这个简单的规则,从你来了 https://www.nginx.com/blog/creating-nginx -rewrite -rules /

 

This is how I fixed the problem
rewrite ^/pl/(.*)$ /pl.php?user=$1 last;
Yep, just this one simple rule, got it from
https://www.nginx.com/blog/creating-nginx-rewrite-rules/

 
 

相关问题

2  nginx反向代理到LAMP服务器:无法登录PHPMYADMIN  ( Nginx reverse proxy to lamp server cant login to phpmyadmin ) 
我很新的是apache,甚至更新到反向代理,但我最终用nginx(作为反转代理)和apache安装一个服务器,以管理具有不同技术的网站。 PHP网站(下面的PHP_SITE)由Apache处理,Ruby在Rails网站上由Nginx处理。稍后应添加更多网站。一切都在工作正常,除了phpmyadmin。 我的问题:我可...

1  nginx不会将外部请求传递给localhost  ( Nginx doesnt pass outer request to localhost ) 
jetty服务器在localhost上运行:8080和在通过curl(Putty)提出请求时成功响应: curl -H "Content-Type: application/json" -X POST -d '{"message":"Hi"}' http://localhost:8080 我有以下 ngi...

0  编写nginx服务器块以捕获通配符n级子域?  ( Writing an nginx server block to capture wildcard n level subdomains ) 
我正在运行nginx代理服务器,以使用OpenResty / Lua和Letsencrypt自动生成SSL证书,在多租户SaaS平台中。我有许多需要证书的域,而且无法白发性审商它们,因此我的证书服务器接受指向它的所有请求。 我开始看到很多符合域结构的大量无效域请求: www.randomsubdomain.any...

5  nginx反向代理:未设置过期标头  ( Nginx reverse proxy not setting expires header ) 
我的静态资产配置为 location @upstream { proxy_pass http://localhost:82; proxy_set_header Host $host; proxy_set_header X-Real-IP $r...

0  (服务php)apache2会在每个连接上创建新线程吗?  ( Serving php does apache2 will create new thread on every connection ) 
基于许多在线源,在服务静态文件中,Apache2将在每个不同的连接上创建新线程......导致资源饥饿 但是如何通过apache2服务php(mod_php,mpm worker等)? Apache还将打开像服务静态文件一样的新线程吗? (afaik,在nginx php-fpm中,我们可以设置最大线程,但我不知道每...

4  nginx / php-fpm =空白页面  ( Nginx php fpm blank pages ) 
亲爱的serverfault社区, 我在两天前设法将我的网站陷入全功能状态..在3小时前今天,我重新启动了我的Linux盒子,并找到了我的网站不再工作。我不知道为什么这会是和坦率地坦率地说,我只是不要觉得我现在处于一个水平来解决它 - 我可以用你的帮助来真正做:) 基本上,我的nginx php文件都呈现为空白或说...

0  nginx + php5-fpm + cifs share + cakephp超时  ( Nginx php5 fpm cifs share cakephp timeout ) 
我最近将我的cakephp 3开发环境移动到网络共享。 所涉及的服务器只有nginx webroot的路径更改( root /var/www/webroot ,到 root /mnt/dev/webroot )。 我正在通过 /etc/fstab 安装CIFS共享,如下所示: //nfs/WebDev /mnt/...

0  在Ubuntu Server上启用端口 - nginx反向代理  ( Enable ports on ubuntu server nginx reverse proxy ) 
我的私人IP是例如175.34.55.2 ubuntu@ip-175-34-55-2:~$ sudo nmap -sT -p- 175.34.55.2 Not shown: 65531 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp ...

0  使用php_error.log在我的nginx服务器上使用php_error.log  ( What is using php error log in var log on my nginx server ) 
在/ var /日志中我的nginx服务器有php5-fpm.log和php_error.log php_error.log有各种各样的通知,使其大小增长到数百MB的大小。我试图找到哪个php.ini管理这个文件,但没有运气。 php --ini 给出: Configuration File (php....

0  鼠尾草 - 签名不匹配错误和nginx 504错误  ( Gunicorn signature mismatch error and nginx 504 error ) 
我正在使用烧瓶和麦克松在Debian 10和Nginx HTTP服务器上运行应用程序。 网站运行良好,但有时它会非常缓慢地加载nginx 504错误,如果我打开错误日志,我会发现一堆错误,在哪里: gunicorn[16962]: Signature mismatch: url's None != expecte...

0  阻止所有与fail2ban的恶意nginx连接  ( Blocking all malicious nginx connections with fail2ban ) 
最近,我的服务器攻击有很大的增加,让我切换到更具侵略性的Fail2ban阻止策略。 为了减少传入连接的数量,我还重新配置了nginx(用于清楚的恶意请求): keepalive_requests 0; keepalive_timeout 0; return 444; (...) error_page 400...

0  nginx代理路径返回原点URL  ( Nginx proxy path return origin url ) 
nginx作为几个网站的代理。在其中一个站点上,重定向到SSO登录和返回URL显示的原点域,而不是代理。 conf: location /demo/web1 { proxy_pass https://website1.net/web1/index.html; proxy_redirect default; ...

1  电子邮件处理与收件箱.py和nginx  ( Email handling with inbox py and nginx ) 
我有一个运行在枪手和nginx后面的烧瓶web应用程序。 nginx代理ivrhub.org的任何流量到正确的烧瓶应用程序。 我非常喜欢使用 inbox.py 来处理一些传入的电子邮件。在我的服务器上运行Inbox.py示例,然后向Hello@ivrhub.org发送电子邮件至hello@ivrhub.org不起作...

4  发布请求时405(不允许)  ( 405 not allowed on post request ) 
在Winginx发生问题之前的一切工作。当我用jQuery向数据发送数据时,我得到405(不允许)错误。效果完全好。 当我从/ formcheck请求数据(这是forcmcheck.php并且自己的正常工作)我收到此错误。除了重写引擎的几行之外,我在nginx日志中没有改变任何东西。 您可以查看日志: 127...

0  如何使挖掘荣誉TTLS /使用本地操作系统缓存?  ( How to make dig honour ttls use the local os cache ) 
当我运行 dig example.com 响应回到 SERVER: 192.168.0.1 ,即使在后续运行。这意味着dig始终正在进行网络调用来解析DNS记录。 i(相反,不知情)假设我的操作系统将根据其TTL缓存DNS记录,并且该挖掘将使用该缓存。 dig否则默认忽略ttl /不使用缓存?如果是,我如何让挖掘...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.