Nginx的。 使用正则expression式redirect

我是nginx的新手。 我有Apache之前的nginx,我有问题。

我似乎需要在configuration2规则:

规则1)如果我们有url“/ my_path”我们不碰它,但用户去“/ my_path.php”

规则2)如果我们有url“/my_path.php”,我们将它改为“/ my_path”,用户转到“/my_path.php”,因为我们回到规则1。

我认为这是必要的search引擎优化?

我的configuration,例如是…

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不能用于正则expression式。 它是否正确? 我想我的configuration是错误的?

谁能帮忙? 感谢您的帮助提前。

我的解决scheme – 它的工作

  # 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 az file name to name.php location ~ ^/([A-Za-z_]+)$ { proxy_pass http://my_apache_server/$1.php; } 

不能代理通过一个URI,这将在URL( http://my_apache_server//$.php )之后形成一个双斜杠。

尝试:

 location ~^\/(.+)$ { rewrite ^\/(.+)$ /$1.php break; proxy_pass http://my_apache_server; }