【问题标题】:Cleaning up URL in PHP在 PHP 中清理 URL
【发布时间】:2016-05-24 08:02:30
【问题描述】:

我想使用 PHP ZF2 框架“清理”我的 URL。网址如下:

http://sitename.com/testingtesting/?inviter123

站点名称和查询字符串参数之间的部分是我想取出的部分:

testingtesting

另外名称不一定是testingtesting,它可以是test,或者任何其他名称,字符串的长度可以变化,这是我最困惑的地方。问题就在这里,不管大小如何,如何取出//行之间的所有内容...

附:到目前为止,我所做的如下:

 $controllerName =  substr($_SERVER["REQUEST_URI"],1,10);

这会返回以下内容:

/testingtesting/?inviter123

现在的问题是如何去除字符串中不需要的内容...

编辑:

我想在 PHP 中使用 substr 方法,我跳过了字符串数组中的第一个元素,但是如何获取 /hereitcanbeanysize/ 之间的动态长度...

尝试了罗伯特的解决方案,这是我得到的:

array(4) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "sitename.com" ["path"]=> string(16) " /testingtesting/" ["query"]=> string(10) "inviter123" }

现在我需要去掉数组“路径”元素中的 //... 我该怎么做?

【问题讨论】:

    标签: php zend-framework2 clean-urls


    【解决方案1】:

    您可以使用parse_url() 函数合并主机、方案和路径,无需查询部分。

    检查此代码:

    $urlParts = parse_url('http://sitename.com/testingtesting/?inviter123');
    
    echo str_replace('/' , '', $urlParts['path']);
    

    【讨论】:

    • 嗨@Robert,你能更具体一点吗?您能否发布一个示例,以便我可以测试您的解决方案并接受您的答案,如果可以的话...编辑好的,我会检查一下.. :)
    • 嗨@Robert,是的,我刚刚测试过了,它可以工作,但我仍然需要去掉数组路径元素中的 //...
    • 现在检查这些是显示数组内容的真正基础。
    • 谢谢@Robert,我知道了!嘿顺便说一句,我怎样才能获得完整的网址?我已经这样做了:$_SERVER["REQUEST_URI"] 但我只得到 /testingtesting/?inviter123 的部分.. 我没有得到完整的 URL
    • php $_SERVER 或 Zend 的方法有多种方法,请检查stackoverflow.com/questions/11025858/…
    【解决方案2】:

    我认为做你想做的最好的方法是重写网址: .htaccess - 如果你使用 Apache 服务器 - 或 web.config - 如果你使用 IIS-。

    此外,您可以在查询字符串之前捕获字符串名称,以便在您的应用逻辑中使用它。

    .htaccess 示例:

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^/testingtesting/(.*) /$1 [QSA]
    

    如果你只想显示干净的 url:

    $cleanUrl = str_replace('/testingtesting','', $_SERVER["REQUEST_URI"]);
    

    【讨论】:

      【解决方案3】:

      如果你使用的是 ZF2,你不应该使用原生 php 函数来处理这类事情,你应该使用 RouteMach 类来查找/检索匹配的 url 段:

      'route_name' => array(
          'type' => 'segment',
          'options' => array(
              'route' => '/:controller[/:action]',
              'constraints' => array(
                  'controller' => '[a-zA-Z][a-zA-Z0-9_-]+',
                  'action'     => '[a-zA-Z][a-zA-Z0-9_-]+',
              ),
              'defaults' => array(
                  'controller' => 'Application\Controller\IndexController',
                  'action'     => 'index',
              ),
          )
      )
      

      现在您可以从路由匹配 (Zend\Mvc\Router\RouteMatch) 中获取控制器和操作;

      /** @var MvcEvent $event */
      $routeMatch = $event->getRouteMatch();
      $controller = $routeMatch->getParam('controller');
      $action = $routeMatch->getParam('action');
      

      还要检查the ZF2 documentation on Routing here

      您正在使用一个框架,请确保您知道如何正确使用它。当你想从你的 url 中获取片段时,使用像 substrparse_url 这样的原生 php 方法绝对是不是的方法。

      查看教程以熟悉 ZF2 基础知识,例如 ZF2 skeleton application (also known as the album application)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多