使用GET Vars重写URL

时间:2016-01-30 23:00:44

标签: php .htaccess url url-rewriting get

我正在尝试使用HTACCESS重写我的剧目中的所有网址。我希望他们拥有相同的模型/架构。我在不同的网站上找到了一些代码,但是当我尝试它们时却没有工作。

这是我想要做的:

  

  • 我有这个网址: localhost / projects.php?id = 1
  •   
  • 我希望它看起来像这样: localhost / projects / 1   
  •   
    这是另一个例子:

         

  • 我有这个网址:localhost / profile.php?id = 1
  •   
  • 我希望它看起来像这样:localhost / profile / 1   
  • 换句话说,我想改变这个:

    • 本地主机/ page.php文件PARAM =值安培; parm2 =值2&安培; ...

    • 本地主机/页/值/ VALUE2 /...

    有什么方法可以用我的所有页面做到这一点吗?我不知道我应该在HTACCESS文件上写什么。

    1 个答案:

    答案 0 :(得分:1)

    首先使用.htaccess解析所有路径将是一个血腥的痛苦,您应该只处理所请求的文件及其参数然后您应该解析您的PHP代码中的参数(这称为路由),您将为您创建路由应用

    请检查下面的.htaccess规则;

    #These are our conditions to run our rewrite rule
    RewriteCond %{REQUEST_FILENAME} !-f #Request is not a file
    RewriteCond %{REQUEST_FILENAME} !-d #Request is not a directory
    RewriteCond %{REQUEST_FILENAME} !-l #Request is not a link
    #This is our rewrite rule   
    RewriteRule ^([a-zA-Z0-9]*)?/(.*)$ $1.php/$2 [QSA,L] #QSA means QueryStringAppend modify according to your need, L means this is my last rule which same with stop processing rewrite rules
    

    你应该有一个类似下面的PHP代码来处理你的路由请求

    <?PHP
        $requestedPath = trim($_SERVER["PHP_SELF"],"/");
        $request = explode("/",$requestedPath,2);
        $requestFileName = $request[0]; //This is your requested file as you know already from .htaccess
        $requestParams = $request[1]; //You should parse this params according to your routing need
    ?>
    

    希望这些信息可以帮助您了解路由和通用.htaccess规则。

    PS:您的请求将类似于www.example.com/myaction/first-parameter/second-parameter/third-parameter,对于此示例,$ requestParams将为first-parameter/second-parameter/third-parameter