在nginx上清理URL和php扩展

我已经看了网上的其他几十个问题和参考 – 而且通过我所有的计算,我的设置应该可以工作,但是不能。

我有php-fpm的nginx安装。 如果我尝试访问一个.php文件,它运行正确,我得到正确的结果。 我在我的configuration文件中得到这个:

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; } 

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

 location / { try_files $uri $uri/ $uri.php?query_string } 

这种工作,也就是服务器访问.php文件。 然而,不是使用上面现有location ~ \.php$块来执行它,而只是将php源代码作为下载到浏览器中。 如果我手动追加.php到所请求的URL,那么PHP被执行。

感觉就好像服务器把try_files$uri.php匹配$uri.php ,然后就不会在位置做另一个传递来看看它需要做什么。 我试图把php块放在location /上面和下面,但是没有什么区别。

我怎样才能得到执行的PHP?

你有没有尝试rewrite指令? 例如:

 location / { try_files $uri $uri/ @extensionless-php; index index.html index.htm index.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; } location @extensionless-php { rewrite ^(.*)$ $1.php last; } 

资料来源: http : //www.tweaktalk.net/60/nginx-remove-php-file-extension-from-url

try_files总是在当前的上下文中执行,这就是为什么它作为普通文件服务于你的php -scripts – 当前位置缺lessfastcgi_passtry_files是邪恶的,因为它不是直截了当地创造可疑的块,避免它。

在同一时间,正则expression式位置优先于普通位置,这就是为什么当您颠倒顺序时没有任何变化。

就我个人而言,我认为从地址栏隐藏.php扩展名是无用的,因为它向configuration文件添加了更多的代码。