【问题标题】:Redirecting page while leaving imaginary subdirectories intact重定向页面,同时保留虚构的子目录
【发布时间】:2016-12-10 06:34:58
【问题描述】:

我的网站根目录中有一个文件user.php。要访问用户的页面,您可以访问/user/foo-bar,其中foo-bar 是用户名。

我的目标是:

  • mysite.com/user 重定向回index.php 的根目录
  • mysite.com/user/foo-bar 改写为/user?name=foo-bar

这是我尝试过的:

Options +MultiViews
RewriteEngine On
RedirectMatch   ^user/?$       /
RewriteRule     ^user/(.+)$    user?name=$1

但是mysite.com/user 不会重定向,像mysite.com/user/foo-bar 这样的页面也没有查询字符串数据。

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    关闭MultiViews,不要将RedirectMatchmod_rewrite 规则混用,您的代码如下:

    Options -MultiViews
    RewriteEngine On
    
    RewriteRule ^user/?$ / [L,NC,R=301]
    
    RewriteRule ^user/(.+)$ user.php?name=$1 [L,QSA,NC]
    

    【讨论】:

    • 经过测试,但这不会将/user 重定向到/。此外,在/user/foo-bar$_GET['name'] 上什么也没有显示;但是,它在显式设置时包含名称:/user/foo-bar?name=foo-bar
    • 没有/user目录;有/user.php。目前我的.htaccess 就是你发布的内容。
    • 如果/user to / 重定向没有发生,那么我怀疑你这边有一些配置问题。通过在您的.htaccess 顶部放置一些垃圾(随机)文本来验证您的.htaccess 是否启用,并在您在浏览器中访问您的页面时查看它是否生成500(内部服务器)错误。 500 错误意味着 .htaccess 已启用。
    • 这是个问题。我现在启用了.htaccess,但/user/foo-bar 重定向到/?name=foo-bar 而不是/user?name=foo-bar
    • 根据我的规则/user/foo-bar 没有重定向。它只是重写而不更改浏览器中的 URL。彻底清除浏览器缓存,然后进行测试。
    猜你喜欢
    • 1970-01-01
    • 2021-03-12
    • 2014-08-18
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多