【问题标题】:take variable from middle of url and append it to the very end从 url 中间获取变量并将其附加到最后
【发布时间】:2021-03-20 00:29:54
【问题描述】:

我有这样的链接

  • http://panel.domain.com/users/index.php?user=8
  • http://panel.domain.com/users/settings/index.php?user=8

我想把它们改写成这样:

  • http://panel.domain.com/users/8/
  • http://panel.domain.com/users/8/settings

我希望它在用户ID之后取任何东西并将其放在用户之后,然后转到该页面的index.php并将用户ID放在最后,如下所示:users/USERID/chain/of/directories/index.php?user=USERID

我可以用这个进行第一次重写:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?user=$1

我试过做这样的事情

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^users/(.*)/$ $2/index.php?user=$1

$2 是第一个,因为它应该是 users/ID/ 之后的所有内容,然后 $1 应该是 /ID/,它被放置在目录链的末尾:users/ID/settings/index.php?user=ID

但我真的不知道它是如何工作的。我不知道是什么让$1$2 工作,而且我不懂正则表达式。我整晚都在看珍珠文档,只是想把东西拼凑起来,但我就是不明白。

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting friendly-url


    【解决方案1】:

    您可以在站点根目录.htaccess 中使用此 .htaccess 代码:

    Options -MultiViews
    RewriteEngine On
    
    RewriteRule ^users/([\w-]+)(/.+)?/?$ /users$2/index.php?user=$1 [L,QSA]
    

    假设您在 /users/ 目录中没有任何 .htaccess。

    【讨论】:

    • 将其修改为 RewriteRule ^users/([\w-]+)(/.+)?/?$ /users/$2/index.php?user=$1 [L,QSA](用户和 $2 之间的斜线),它可以完美运行,谢谢!
    • 实际上我们已经在$2 中捕获了/,这就是我在回答中省略它的原因
    【解决方案2】:

    您能否尝试根据您展示的示例进行以下、编写和测试。您可以在一个镜头中捕获这两个变量,您不需要为此使用 2 个条件。

    仅将此 .htaccess 文件放在您的用户文件夹中。

    请确保在测试您的 URL 之前清除您的浏览器缓存。

    RewriteEngine ON
    RewriteBase /users/
    
    RewriteRule ^/?$ index.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(\d+)/?$ index.php?users=$1 [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(\d+)/.*$ settings/index.php?users=$1 [L]
    

    【讨论】:

      猜你喜欢
      • 2015-02-13
      • 1970-01-01
      • 2016-10-19
      • 2021-02-13
      • 1970-01-01
      • 2012-12-15
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多