【问题标题】:PHP all GET parameters with mod_rewritePHP所有带有mod_rewrite的GET参数
【发布时间】:2011-06-08 02:56:53
【问题描述】:



我正在设计我的应用程序。我应该做接下来的事情。在 mod_rewrite 的帮助下,所有 GET 参数 (?var=value) 都应该转换为 /var/value。我怎样才能做到这一点?我只有 1 个 .php 文件(index.php),因为我使用的是 FrontController 模式。你能帮我解决这个 mod_rewrite 规则吗?

对不起我的英语。提前谢谢你。

【问题讨论】:

  • 这对你和你的用户来说听起来都很可怕。通常,让您的路径看起来像指定内容的路径是一个好主意,但不理会其他参数。例如,您可能有 /content/5,而不是 /content.php?id=5。但是,如果您有一些选择,您可能想要执行 /content/5?opt1=something&opt2=something 之类的操作。

标签: php apache url .htaccess mod-rewrite


【解决方案1】:

AFAIK mod_rewrite 不处理问号之后的参数——重写规则的正则表达式行尾匹配“?”之前的路径结尾。因此,您几乎只能传递参数,或者在重写时完全删除它们。

【讨论】:

    【解决方案2】:

    我在使用“seo 友好”网址的网站上做这样的事情。

    在 .htaccess 中:

    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* /index.php [L]
    

    然后在 index.php 上:

    if ($_SERVER['REQUEST_URI']=="/home") {
        include ("home.php");
    }
    

    .htaccess 规则告诉它在没有找到请求的文件或目录时加载 index.php。然后你只需解析请求 URI 来决定 index.php 应该做什么。

    【讨论】:

    • 美丽。这正是我所需要的。
    【解决方案3】:

    .htaccess

    RewriteEngine On
    
    # generic: ?var=value
    # you can retrieve /something by looking at $_GET['something']
    RewriteRule ^(.+)$ /?var=$1
    
    # but depending on your current links, you might
    # need to map everything out. Examples:
    
    # /users/1
    # to: ?p=users&userId=1
    RewriteRule ^users/([0-9]+)$ /?p=users&userId=$1
    
    # /articles/123/asc
    # to: ?p=articles&show=123&sort=asc
    RewriteRule ^articles/([0-9]+)/(asc|desc)$ /?p=articles&show=$1&sort=$2
    
    # you can add /? at the end to make a trailing slash work as well:
    # /something or /something/
    # to: ?var=something
    RewriteRule ^(.+)/?$ /?var=$1

    第一部分是接收到的 URL。第二部分是重写的 URL,您可以使用$_GET 读出。 () 之间的所有内容都被视为变量。第一个是$1,第二个是$2。这样您就可以准确地确定变量在重写后的 URL 中的位置,从而知道如何检索它们。

    您可以使用(.+) 保持其非常笼统并允许“一切”。这仅仅意味着:任何字符(.)中的一个或多个(+)。或者更具体,例如只允许数字:[0-9]+(0 到 9 范围内的一个或多个字符)。您可以在http://www.regular-expressions.info/ 上找到更多关于正则表达式的信息。这是一个测试它们的好网站:http://gskinner.com/RegExr/

    【讨论】:

      【解决方案4】:

      .htaccess 中的以下代码将重写您的 URL,例如。 /api?other=parameters&added=true/?api=true&other=parameters&added=true

      RewriteRule ^api/           /index.php?api=true&%{QUERY_STRING} [L]
      

      【讨论】:

      • 这正是我想要的!谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2017-04-08
      相关资源
      最近更新 更多