간단한 nginx 다시 쓰기 규칙


0

이 기본 htaccess 규칙을 nginx 형식으로 다시 작성 (변환)해야합니다. 도와 줄래? 감사.

RewriteEngine On  

RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f  

RewriteRule ^(.*)$ ./index.php?request=$1

그리고 이것은 내 전체 site.com nginx 구성입니다.

server {
listen 80;
#listen [::]:80 default ipv6only=on;
server_name www.domain.com domain.com;
root /home/user/domains/domain.com/public_html;
access_log /home/user/domains/domain.com/logs/access.log;
error_log /home/user/domains/domain.com/logs/error.log;

index index.php index.html index.htm;
error_page 404 /404.html;

location / {
   try_files $uri $uri/ /index.php?request=$uri;
}

location ~ \.php$ {
    try_files $uri =403;
    fastcgi_pass unix:/var/run/php5-fpm-user.sock;
    include fastcgi_params;
}

location ~ /\.ht {
    deny all;
}
}

그리고 이것은 index.php 파일 내용입니다. 도움이 될 것입니다. 그것은 깨끗한 URL 기능을 가지고 있습니다.

<?php
header('Content-type: text/html; charset=utf-8');

if ( !isset($_GET['debug']) )
    error_reporting(0);

if ( !defined("HQ") || !defined("HQ") )
{
    echo "No sneaky!";
    exit;
}

define( "SYSTEM", HQ . "system/" );
define( "SYSTEM_URL", HQ_URL . "system/" );
define( "FRONTEND", "true" );

// Required files
require_once SYSTEM . "assistants/utf8.php";
require_once SYSTEM . "assistants/config.inc.php";
require_once SYSTEM . "assistants/clerk.php";
require_once "display_functions.php";

// Initialize
$clerk= new Clerk();
$clerk->dbConnect();
$clerk->loadSettings();

// Load plugins
loadPlugins();

// Include all modules
$defaultModules= array( "global", "design", "pages" );
$modules= scanFolder( SYSTEM . "modules", 1 );

foreach ( $defaultModules as $key )
{
    $viewFile= SYSTEM . "modules/" . $key . "/view.php";
    if ( file_exists( $viewFile ) )
    {
        include_once $viewFile;
    }
}

foreach ( $modules as $key => $val )
{
    $viewFile= SYSTEM . "modules/" . $key . "/view.php";
    if ( file_exists( $viewFile ) )
    {
        include_once $viewFile;
    }
}

// Clean URL switching, if requested
// for debugging purposes
if ( isset( $_GET['clean_urls'] ) )
{
    if ( $_GET['clean_urls'] == 0 )
    {
        $clerk->updateSetting( "clean_urls", array( 0 ) );
    }
    elseif ( $_GET['clean_urls'] == 1 )
    {
        $clerk->updateSetting( "clean_urls", array( 1 ) );
    }
}

// URI Router
if ( $clerk->getSetting( "clean_urls", 1 ) == 1 && empty( $_GET['request'] ) == false )
{
    $_GET['request']= utf8_strtolower( $_GET['request'] );

    $uri_routes= call_anchor( "uri_router", array() );

    foreach ( $uri_routes as $pattern => $result )
    {
        if ( preg_match( "#$pattern#", $_GET['request'] ) )
        {   
            $remainder= preg_replace( "#$pattern#", "", $_GET['request'], 1 );

            if ( !empty( $remainder ) ) continue;

            $match= preg_replace( "#$pattern#", $result, $_GET['request'], 1 );
            parse_str( $match, $map );
        }
    }

    $_GET= $map;
}

foreach ( $modules as $key => $val )
{
    $module= getRemappedVar( $key );

    if ( in_array( $key, $defaultModules ) )
    {
        if ( $module == getRemappedVar("pages") && !empty( $_GET['id'] ) )
        {   
            $pageDetails= pageInfo( $_GET[getRemappedVar("pages")] );
            $pageType= $pageDetails['content_type'];

            $layout= $pageType;
            $activeModule= $pageType;
        }

        continue;
    }

    if ( array_key_exists( $module, $_GET ) )
    {
        $layout= $key;
        $activeModule= $key;

        break;
    }
}

if ( empty( $layout ) || $layout == "pages" ) $layout= "default";

$index_page= pageInfo( $clerk->getSetting( "index_page", 1 ) );
$index_page= $index_page['slug'];

$selectedPage= ( empty( $_GET[getRemappedVar("pages")] ) ) ? $index_page : $_GET[getRemappedVar("pages")];
foreach ( $modules as $key => $val )
{
    $module= getRemappedVar( $key );

    if ( !empty( $_GET[getRemappedVar($key)] ) && $module == getRemappedVar("pages") )
    {
        $selectedPage= $_GET[getRemappedVar($key)];
        break;
    }

    // Not viewing a page (domain.com/?projects=id)
    elseif ( !empty( $_GET[getRemappedVar($key)] ) && $module != getRemappedVar("pages") )
    {
        $selectedPage= getRemappedVar($key);
        break;
    }
}

// Constants
call_anchor( "site_init" );

define( "THEME", $clerk->getSetting( "site_theme", 1 ) );
define( "THEME_URL", HQ_URL . "site/themes/" . THEME . "/" );
define( "LAYOUT", "layout_" . $layout . ".php" );
define( "ACTIVE_MODULE", $activeModule );
define( "PAGE", $selectedPage );

// Check if layout exists.
if ( file_exists( HQ . "site/themes/" . THEME . "/" . LAYOUT ) == false )
{
    echo "Oops! Looks like your theme is missing the layout file, <em>" . LAYOUT . "</em>.<br /><br />Create this file and upload it to the root of your theme's folder. Don't forget to fill it with template tags and your custom HTML!";

    exit;
}

call_anchor( "site_begin" );

require_once "themes/" . THEME . "/" . LAYOUT;
?>

답변:


0

try_files를 사용해야합니다

location / {
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php?request=$args;
}

마이크 감사하지만 작동하지 않았습니다. 오류는 없었지만 작동하지 않습니다. 예를 들어 깨끗한 URL이 없으면 URL은 그와 같습니다. domain.com/?page=works 난 후에는이 같은 URL을 만드는 깨끗한 URL을 가능하게 domain.com/works 하지만 페이지를로드 나던. 어떤 생각?
borannb

내가 한 일과 무언가를 달성했습니다. 나는 그런 코드를 바꿨다. location / { try_files $uri $uri/ /index.php?page=$uri&$args; } 그리고 이것은 지금 작동하지만 제대로 작동하지 않습니다. 이제 모든 링크 domain.com/projects, domain.com/blog 및 domain.com/about는 domain.com/?page=projects를 가리 킵니다
borannb

0

앞에서 언급 try_files했듯이을 조금 다르게 다시 작성해야하지만 을 사용해야합니다 .

location / {
    try_files $uri $uri/ /index.php?request=$uri;
}

마이클은 작동하지 않습니다. 모든 링크는 동일한 홈페이지를 엽니 다.
borannb

당신은 nginx를 다시로드 했습니까?
Michael Hampton

예, NGINX를 다시로드했습니다.
borannb

Btw, 이것은 깨끗한 URL이없는 링크 형식입니다. domain.com/?page=Workdomain.com/?page=Work&id=workkk
borannb

내 질문도 업데이트했습니다. 전체 site.com nginx conf를 추가했습니다.
borannb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.