2016-07-01 16 views
1

私はNGINXウェブサーバー上にあり、URLから.phpという拡張子を削除したいと思います。いくつかの類似事例の指示に従うことを試みたが、何も私のconfで動作するように思われなかった場合NGINXで.php拡張子を削除してください

server { 
    server_name www.mywebsite.com mywebsite.com; 
    return 301 https://mywebsite.com$request_uri; 
} 
server { 
    listen 443 ssl; 

    server_name www.mywebsite.com; 
    return 301 https://mywebsite.com$request_uri; 

    ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; 

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    ssl_prefer_server_ciphers on; 
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; 
} 
server { 
    listen 443 ssl; 
    root /opt/http/nginx/sites/mywebsite/www; 
    index index.php index.html; 
    server_name mywebsite.com; 

    location/{ 
     #rewrite ^(/.*)\.html(\?.*)?$ $1$2 permanent; 
     try_files $uri $uri/ $uri.php?$args; 
    } 

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { 
     expires 365d; 
    } 

    location ~* \.(pdf)$ { 
     expires 30d; 
    } 

    client_max_body_size 3M; 

    ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; 

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    ssl_prefer_server_ciphers on; 
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; 

    error_page 403 /index.php; 

    location ~ \.php$ { 
     try_files $uri =404; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 

    access_log /var/log/nginx/www.mywebsite.access.log; 
    error_log /var/log/nginx/www.mywebsite.error.log; 
} 

は、私は現在、次のconfを持っています。

  1. クライアントhttps://mywebsite.com/page.phpを要求します:OK
  2. クライアントがhttps://mywebsite.com/pageを要求:OK
  3. 問題は、コード

    location/{ 
        try_files $uri $uri/ $uri.php?$args; 
    } 
    

    のこの作品は、2つの場合にうまく機能しているということです

URLを書き換えません!

私が必要とするのは、クライアントがファイル拡張子を持つページにアクセスしようとすると、NGINXがURLを書き換えるように指示することです。たとえば、login.phpを要求すると、nginxは 'login'を書き直します。

また、URLにGETパラメータを保持する必要があります。

私のコードでは、拡張子を持つphpファイルへのリンクを保持し、相対URLではないので(NGINXが書き換えることを望む)、適切なconfは何ですか? (私は私のコードで相対URLを設定する必要がある場合、私は私は私の地元を壊したくないことができます)

+0

[書き換えルールでURLから.phpを削除する](http://stackoverflow.com/questions/19975218/remove-php-from-url-with-rewrite-rule) – aldanux

+0

はい私は指示に従っていますこの投稿では何も働いていませんでした... –

答えて

0

私はすでにこの1つを試してみましたが、ありがとうbtwですが、すべてのURLを書き換えません。たとえば、次のように

<nav class="navbar navbar-inverse navbar-fixed-top"> 
    <div class="container"> 
     <div class="navbar-header"> 
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> 
       <span class="sr-only">Toggle navigation</span> 
       <span class="icon-bar"></span> 
       <span class="icon-bar"></span> 
       <span class="icon-bar"></span> 
      </button> 
      <a class="navbar-brand" href="index.php"> 
       <img height="34" src="img/logo.png" alt="Website logo"> 
      </a> 
     </div> 
     <div id="navbar" class="navbar-collapse collapse"> 
      <ul class="nav navbar-nav navbar-right"> 
       <?php if (isset($_SESSION['auth'])): ?> 
        <li><a href="logout.php">Logout</a></li> 
       <?php else: ?> 
        <li><a href="register.php">Sing up</a></li> 
        <li><a href="login.php">Sign in</a></li> 
       <?php endif; ?> 
      </ul> 
     </div><!--/.navbar-collapse --> 
    </div> 
</nav> 

私はロゴをクリックすると、それはindex.phpにリダイレクトし、nginxのは/indexへのURLを書き換え(のみ/が良くなりますが、なぜない...)ので、これは私は挙動があります探している。

たとえば、「サインイン」をクリックすると、login.phpにリダイレクトされ、それ以外のことは起こりません。しかし、/loginと入力すると動作しますが、NGINXはindex.phpファイルのみを書き換えているようですので、すべてのページで必要です。

+0

'server {}'ブロックに 'rewrite ^(/.+)\ php $ $ scheme:// $ host $ 1 permanent;'を追加すると、 '.php'拡張子なしで! –

0
location/{ 
     try_files $uri $uri.html $uri/ @extensionless-php; 
     index index.html index.htm index.php; 
    } 

    location ~ \.php$ { 
     try_files $uri =404; 
    } 

    location @extensionless-php { 
     rewrite ^(.*)$ $1.php last; 
    } 

これは、HTMLやPHPのフォームのURLの両方を削除します。 More Detail

関連する問題