【问题标题】:.htaccess rule redirects all urls to the same location.htaccess 规则将所有 url 重定向到同一位置
【发布时间】:2015-01-29 00:09:00
【问题描述】:

我正在尝试修改一个重定向规则,但它并没有像我想要的那样工作。也许有人可以调查一下并建议需要纠正的地方。

我有这个规则:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/$ /page.php?id=$1 [L]

规则将www.site.com/page.php?id=one 重定向到www.site.com/one/,这是我需要做的。

但是,相同的规则会将所有其他页面(例如 www.site.com/about-us/)重定向到 www.site.com/page.php?id=

规则中需要更改什么以仅重定向我想要的页面而不是所有其他页面?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite redirect


    【解决方案1】:

    您可以限制您的规则:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(one|two|three)/$ /page.php?id=$1 [L,QSA]
    

    【讨论】:

    • 这行不通,因为$id 可以是字母和数字的任意组合
    • 你问:规则中需要改变什么,只重定向我想要的页面,这意味着你已经知道要重定向的页面的名称。以上只是一个示例,说明如何仅包含要重写的已知页面
    【解决方案2】:

    我能想到的唯一方法是在要忽略或重写的 URL 中插入插入标识符键。

    例如下面的代码将用http://www.example.com/page.php?id=one-1重写http://www.example.com/one-1/

    RewriteRule ^([a-zA-Z0-9-_]+)-([0-9]+)/$ /page.php?id=$1 [L]
    

    【讨论】:

    • 这是我打算做的,以防没有其他选择。决定先问,因为我想保持 URL 尽可能干净。
    • 在这种情况下,另一种选择是使用硬编码的重写条件(没有正则表达式)。
    猜你喜欢
    • 2017-01-20
    • 2015-07-14
    • 1970-01-01
    • 2017-08-29
    • 2018-07-18
    • 1970-01-01
    • 2010-12-27
    • 2021-04-10
    • 2023-03-29
    相关资源
    最近更新 更多