【问题标题】:Rewrite URL using .htaccess to shorten link使用 .htaccess 重写 URL 以缩短链接
【发布时间】:2012-03-15 12:07:12
【问题描述】:

我希望能够获取网址

www.mydomain.com/profile.php?user=THEUSERNAME

把它变成

www.mydomain.com/THEUSERNAME

几乎像 Twitter。

我也想把它放在我可以去的地方

www.mydomain.com/THEUSERNAME

它会转到用户的页面,而不会将 URL 更改回长 URL。我不知道这是如何完成的,我也不知道它是否需要 .htaccess、PHP 或两者都需要。 请帮忙。


找到解决方案


在您的 .htaccess 文件中:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/?$ profile.php?user=$1 [L]

您还需要为所有 CSS 和 JS 文件提供 absolute URL。例如,您必须输入 src="http://yourdomain.com/css/main.css" 而不是 src="css/main.css" 。原因是如果您的 url 有反斜杠(即 yourdomain.com/USERNAME/),它会认为它在下一个目录中并且会导致冲突。 Absolute 解决了 CSS 和 JS 的问题。

在profile.php的中:

不是这个:

   <link href="css/allpage.css" rel="stylesheet" type="text/css" />

这个:

   <link href="http://yourdomain.com/css/allpage.css" rel="stylesheet" type="text/css" />

【问题讨论】:

    标签: php apache url rewrite


    【解决方案1】:
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)/?$ /profile.php?name=$1 [L]
    

    这样可以,http://yoursite.com/username(带有或不带有斜杠)将重写为 http://yoursite.com/profile.php?user=username

    您还必须使用基于 / 的文件(对于 &lt;script&gt;&lt;link&gt;)或完整的 URL,否则您可能会遇到一些 404 错误。我还建议您添加一个 CDN,您可以通过 CDN 推送该链接,一个非常好的是 maxCDN - 40USD 第一个 TERABYTE!。

    祝你好运!

    【讨论】:

    • 您实际上并不需要尾部斜杠,但您确实需要确保它不是文件或目录,因为这可能会导致问题。
    • 啊,这引起了一些问题。它不工作,它导致我的文件出错,它无法读取单独目录中的文件。这是否与使用离线服务器(测试服务器 WAMP)有关,即使我之前在此服务器上使用过 REWRITES,并且它们运行良好?
    • @Q.Sheets 这正是我的意思,你只需要添加一个 ?在 $ 之前重写链接,这会起作用,但这将是一件非常困难的事情。
    • 感谢您抽出宝贵时间帮助我。我必须告诉你,虽然这仍然不起作用,实际上它只是说“找不到对象”,就好像 .htaccess 文件没有被触及,而你正在搜索一个不存在的目录。
    • 更新---找到解决方案。谢谢你们带领我走上正轨。
    【解决方案2】:

    试试这个

    RewriteEngine on
    # we're working the document root
    RewriteBase /
    # make sure requested item is not a file
    RewriteCond %{REQUEST_FILENAME} !-f
    # re-route everything that may be a username slug to the profile
    RewriteRule ^([^/]+)/?$ /profile.php?name=$1 [L]
    

    【讨论】:

    • 虽然我可能会根据您的需要添加另一个条件,但效果很好。 RewriteCond %{REQUEST_FILENAME} !-d 确保请求不是目录。
    • “不是目录”只有在“DirectoryListing”处于活动状态时才有意义。无论如何,这是您通常禁止的事情。 (这就是我忽略它的原因……)
    • 感谢您的帮助,但我必须报告这不起作用。它还给了我一个“找不到对象”错误,与上面的答案相同。我有一个完美的重写(当你没有斜杠时),但是当有斜杠时,它会导致 CSS & JS 错误(可能是因为绝对文件位置)。所以这就是我寻求替代方案的原因。感谢您花时间解决我的问题,希望我们能解决这个问题。
    • 更新---找到解决方案。谢谢你们带领我走上正轨
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    相关资源
    最近更新 更多