从 url 的中间获取变量并将其附加到最后

take variable from middle of url and append it to the very end

我有这样的链接

我想把它们重写成这样:

我希望它在用户 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=

我试过这样做

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

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

但我真的不知道它是如何工作的。我不知道是什么让 </code> 和 <code> 起作用,而且我不了解正则表达式。我整晚都在浏览 Pearl 文档,只是想把东西拼凑起来,但我就是不明白。

能否请您尝试根据您显示的示例进行跟踪、编写和测试。您可以在一次拍摄中捕捉到这两个变量,您不需要为此使用 2 个条件。

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

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

RewriteEngine ON
RewriteBase /users/

RewriteRule ^/?$ index.php [L]

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

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

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

Options -MultiViews
RewriteEngine On

RewriteRule ^users/([\w-]+)(/.+)?/?$ /users/index.php?user= [L,QSA]

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