将此规则添加到您的 .htaccess 块重写配置文件网址(打开重写引擎后):
RewriteCond $1 ^m/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ mix.php?id=$1 [L]
该规则现在将仅用于以下 URL:
mydomain.com/m/(WHATEVER NUMBER)
- 第一行是传入的URL必须以
m/开头的条件
- 第二行和第三行是传入 URL 不代表实际文件或文件夹的条件(我们不希望我们不起眼的重写规则阻止我们访问真实资源)。
- 第四行是实际规则本身,它使用正则表达式语法来匹配和捕获出现在主机名之后的所有内容,并将其作为名为@987654327@ 的GET 参数传递给
mixtape.php 文件。此行还包含 [L] 标志,该标志表明当前传入的 URL 将不再发生规则或重写。
在您的 mix.php 文件中,您可以使用 explode 方法将结果字符串拆分为一个数组:
http://example.com/m/foo/bar =>
`http://example.com/mixtape.php?id=/m/foo/bar
$splitArr = explode('/',$_GET['id']);
$splitArr =>
array (
0 => 'm',
1 => 'foo',
1 => 'bar',
)
并用
删除最初的
m
array_shift();
然后,您将得到包含 URL 的所有部分的 $splitArr,并用 /(斜杠)分隔符分隔。
网址example.com/m/foo/bar 如下所示:
array (
0 => 'foo',
1 => 'bar',
)
将此规则放在现有规则之前很重要,因为现有规则将作用于任何传入的 URL。您拥有的最后两条规则应如下所示:
RewriteEngine on
RewriteCond $1 ^m/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ mix.php?id=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/?$ profile.php?user=$1 [L]
关于你的陈述:
这一切都无法改变
我强烈建议您考虑对第一条规则进行小幅更改。使最终网址类似于mydomain.com/users/(USERNAME)(as they do here)。在这些情况下,更具体比过于笼统(如当前规则)要好得多。您是否考虑过如果有人选择用户名可能造成的混乱,例如:
虽然这些用户配置文件是完全有效的用户名:
- mydomain.com/about
- mydomain.com/faq
- mydomain.com/home
这些用户名会阻止您可能希望为网站上其他位置保存的重要 URL。我认为很清楚为什么这些用户名不受欢迎。