使用.htaccess在URL中使用用户名重定向

时间:2011-07-28 15:23:28

标签: php .htaccess redirect

我想进行重定向,用户在网址中输入用户名并重定向到他们的个人资料,例如:> example.com/user/joe重定向example.com/user/profile.php?username=joe并明显显示其个人资料。

我已经四处寻找如何做到这一点,但仍未设法让它发挥作用。 我怎么能这样做?我应该把我的.htaccess文件放在哪里?

    • 管理员
    • 包括
    • 公共
      • 用户
        • profile.php
      • 的index.php

1 个答案:

答案 0 :(得分:3)

从您的目录看起来,'public'目录是您网站的文档根目录。所以,将.htaccess文件放在那里。

这些都没有经过测试。但这应该让你开始。我会用mod_rewrite来实现这个目的。这样的东西应该放到.htaccess文件中。

RewriteEngine On
RewriteRule ^user/(.+)$ user/profile.php?username=$1 [R,L]

这应该可以解决您的问题。 [R]标志会导致Apache HTTPD要求浏览器重定向并访问新URL。如果您希望重定向是内部的,而不是用户对此有任何了解,请不要使用[R,L]标志。

话虽如此,这就是我真正做到的。

RewriteEngine On

# Canonicalize /user/foo to /user/foo/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^profile/([^/]+)$ /profile/$1/ [R=301,L]

# Map /user/foo/ to foo's profile
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^profile/([^/]+)/$ profile/index.php?p=$1 [QSA]

RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-d将确保当用户请求服务器中存在的有效文件或文件夹的资源时,不要理会所有这些重定向规则,继续并立即提供该文件或文件夹。

第一个RewriteRule是为了确保如果用户忘记了斜杠,服务器会要求浏览器重定向到带有斜杠的URL。这就是Apache HTTPD默认行为的方式(也许是因为mod_dir),我也会尝试在这里保留相同的行为。

第二个RewriteRule确保对http://example.com/user/foo/的请求是有效网址,但http://example.com/user/foo/bar/不是。 [QSA]标志可确保保留添加到URL的所有参数。

如果没有[QSA]标记,http://example.com/user/foo/?ref=related+articles会在内部重定向到http://example.com/user/profile.php?user=foo。使用该标志,它将重定向到http://example.com/user/profile.php?user=foo&ref=related+articles,这是我更喜欢的。