Nginx
Nginx 重寫以從文件中刪除 .php 無效,但重定向到首頁
我正在嘗試重寫以從我的 URL 中刪除 .php,但到目前為止還沒有運氣。這是我到目前為止所得到的,然後是下面這個配置的結果。
location ~ \.php$ { try_files $uri/ @extensionless-php; include fastcgi_params; fastcgi_pass hhvm; fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; fastcgi_cache ASPS; fastcgi_cache_valid 200 60m; } location @extensionless-php { rewrite ^(.*)$ /$1.php last; }
這將導致:
example.com/page1.php 轉到 example.com/page1.php 並正確渲染 example.com/page1 渲染 index.php example.com/page1/ 渲染 index.php
有沒有人遇到過這個?這似乎是一件很常見的事情,但我遇到了幾個小時的麻煩,並且在網上無休止地搜尋。
謝謝你的幫助!
您的
location ~ \.php$
塊看不到 URI,example.com/page1
因為它們與正則表達式不匹配。你應該把你的
try_files $uri/ @extensionless-php;
指令放到一個不同的位置——通常是(它會看到除了以 結尾的location /
所有 URI )。.php
嘗試這樣的事情:
location / { try_files $uri $uri/ @extensionless-php; } location ~ \.php$ { if ($request_uri ~ (.*)\.php$) { return 301 $1; } try_files $uri =404; include fastcgi_params; fastcgi_pass hhvm; fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; fastcgi_cache ASPS; fastcgi_cache_valid 200 60m; } location @extensionless-php { rewrite ^(.*)$ $1.php last; }
編輯:為了從以 結尾的 URL 中刪除擴展
.php
,該location ~ \.php$
塊需要將外部呈現的 URL 與內部重寫區分開來。實現此目的的一種方法是$request_uri
使用if
塊進行測試。謹慎使用,因為外部重寫.php
URL 可能會破壞某些應用程序,尤其是在 POST 表單時。