【问题标题】:.htaccecss mod_rewrite - Redirect page and alternate.htaccecss mod_rewrite - 重定向页面和备用
【发布时间】:2026-01-13 22:05:03
【问题描述】:

在我的.htaccess 文件中,我有如下所示的条目:

RewriteEngine on
RewriteRule ^about$ /about-us.php [QSA,NC,L]

这允许用户为 URL 输入 domain.com/about,并且在将该 URL 保留在地址栏中的同时,实际上会在他们的浏览器中加载 about-us.php

如果用户实际上在地址栏中输入domain.com/about-us.php,这会在浏览器中加载正确的页面,但我希望地址栏更改(或重定向)并实际读取domain.com/about

如何阻止用户直接访问about-us.php 页面,如果他们尝试直接访问该页面,则将地址栏改为domain.com/about

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:

    将此规则置于现有规则之上:

    RewriteEngine on
    
    RewriteCond %{THE_REQUEST} \s/+about-us\.php[\s?] [NC]
    RewriteRule ^ /about [R=301,L,NE]
    
    RewriteRule ^about$ /about-us.php [NC,L]
    

    【讨论】:

    • 您能解释一下您的第 2 行和第 3 行吗?我还需要将此规则应用于其他几个页面
    • 它使用%{THE_REQUEST}变量,代表Apache从你的浏览器收到的原始请求,并且在执行一些重写规则后它不会被覆盖。
    • 当我应用该规则时,我似乎在domain.com/about 开始加载之前获得了另一个页面的“闪光”。原因..?
    • 不知道你这里的 flash 是什么意思,但是重定向会立即从 /about-us.php/about,状态码为 301。
    • 请参考http://askapache.com 以获得关于这些变量中每一个的非常好的参考。仅当您的第二条规则中有 /about-us.php?foo=bar 之类的目标时,才需要 QSA