在打开重写引擎后,将此规则添加到您的 .htaccess 块以重写配置文件 URL:
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不代表实际的文件或文件夹(我们不希望我们谦卑的重写规则阻止我们使用真实资源)。
- 第四行是实际的规则本身,它使用正则表达式语法匹配并捕获主机名后出现的所有内容,并将其作为名为
id
的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();
那么你现在拥有了$splitArr
,其中包含使用斜杠/
作为分隔符拆分的URL所有部分。
URLexample.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]
关于你的陈述:
AND NONE OF IT CAN CHANGE
我严重建议您考虑对第一条规则进行微小更改。将最终的URL设为mydomain.com/users/(用户名)
(就像这里一样)。在这些情况下,更具体比过于笼统要好得多(如当前规则)。您是否考虑过如果有人选择了以下用户名可能会带来的混淆:
尽管这些用户名是完全有效的,但这些用户的个人资料将会是:
- mydomain.com/about
- mydomain.com/faq
- mydomain.com/home
这些用户名将阻止您可能想要保存在站点其他位置的重要URL。我认为很清楚为什么这些用户名是不受欢迎的。