![Nginx. 使用正则表达式进行重定向](https://linux22.com/image/627546/Nginx.%20%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%BF%9B%E8%A1%8C%E9%87%8D%E5%AE%9A%E5%90%91.png)
我是 nginx 新手。我在 Apache 之前就用过 nginx,但遇到了问题。
我似乎需要配置中的两条规则:
规则 1)如果我们有 URL“/my_path”,我们就不会触碰它,但用户会转到“/my_path.php”
规则 2) 如果我们有 url“/my_path.php”,我们将其更改为“/my_path”,并且用户转到“/my_path.php”,因为我们恢复到规则 1。
我觉得这对于SEO来说是必要的吗?
例如,我的配置是这样的……
server {
listen 8080;
server_name my_apache_server;
location / {
proxy_pass http://my_apache_server/;
}
location ~^\/(.+)$ {
rewrite ^\/(.+)$ /$1.php break;
proxy_pass http://my_apache_server/;
}
location ~^\/(.+)\.php$ {
proxy_redirect http://my_apache_server/$1 http://my_apache_server/error.php;
}
...
}
但是 nginx 显示错误:
nginx: [emerg] "proxy_pass" cannot have URI part in location given
by regular expression, or inside named location, or inside "if" statement,
or inside "limit_except" block
据我了解,proxy_pass 不能与正则表达式一起使用。这是正确的吗?我想我的配置错了?
有人能帮忙吗?提前感谢您的帮助。
我的解决方案- 有用
# index page
location / {
proxy_pass http://my_apache_server;
}
# redirect(301) real "name.php" file to "name"
location ~ ^/([A-Za-z_]+).php$ {
rewrite ^/([A-Za-z_]+).php$ /$1 permanent;
}
# not existen a-z file name to name.php
location ~ ^/([A-Za-z_]+)$ {
proxy_pass http://my_apache_server/$1.php;
}
答案1
无法通过代理传递到 URI,这会导致 URL 后出现双斜杠 ( http://my_apache_server//$.php
)。
尝试:
location ~^\/(.+)$ {
rewrite ^\/(.+)$ /$1.php break;
proxy_pass http://my_apache_server;
}