我需要能够缩短我的页面:
mydomain.com/mixtape.php?mixid=(WHATEVER NUMBER)
要:
mydomain.com/m/(WHATEVER NUMBER)
现在通常这对我来说并不是一个问题,但由于我的.htaccess文件中存在一些预先存在的函数,因此该函数很难不与其他函数进行不正确的交互。
以下是我的.htaccess文件的当前代码(无法更改)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/?$ profile.php?user=$1 [L]
上面,.htaccess文件正在缩短我的
mydomain.com/profile.php?username=(USERNAME)
到
mydomain.com/(USERNAME)
有没有人可以通过缩短m / index.php?mixid来帮助我,而不是让它与预先存在的函数冲突?
答案 0 :(得分:12)
将此规则添加到您的.htaccess块中,重写配置文件网址(打开重写引擎后):
RewriteCond $1 ^m/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ mix.php?id=$1 [L]
该规则现在仅用于URLS,例如:
mydomain.com/m/(WHATEVER NUMBER)
m/
mixtape.php
的GET参数传递给id
文件。此行还包含[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
,其中包含您网址的所有部分,并使用/
(斜杠)分隔符进行拆分。
网址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)。在这些情况下,更具体而不是过于笼统(如现行规则)。您是否考虑过,如果有人要选择用户名,可能会产生混淆,例如:
虽然完全有效的用户名,但这些用户配置文件将是:
这些用户名将阻止您可能希望为网站上的其他位置保存的重要网址。我认为很明显为什么这些用户名是不受欢迎的。
答案 1 :(得分:-2)
RewriteRule ^m/([0-9]+)$ /mixtape.php?mixid=$1
在现有规则之前或之后加入。不应该引起任何冲突。