【问题标题】:htaccess: remove extension, and redirect to index.php?p=<page>htaccess:删除扩展,并重定向到 index.php?p=<page>
【发布时间】:2014-01-15 00:45:59
【问题描述】:
RewriteRule ^([a-zA-Z0-9]+)?$ index.php?page=$1 [L]

我有以前的代码重写 ex: domain.com/about 到 domain.com/index.php?page=about

所以现在,我想为此添加一个安全措施,以防万一有人将 .html 或 .php 添加到最后认为它应该在那里,我希望它删除扩展名,但仍然遵循我以前的规则。如果文件实际存在,我希望忽略此更改。如果文件存在,还需要处理结尾。

例如:

如果有人输入 about.php 或 about.html,我希望它删除扩展名,然后处理上面的重写规则剩下的内容。

所以about.php会重写为about,然后重写为index.php?page=about

如果可能的话,我希望它实际上将 URL 更改为 domain.com/about。现在,上面的重写离开了 domain.com/about 但只是通过 index.php 处理它。如果他们输入 about.php 或 about.html 我会喜欢它,它会将浏览器重定向到 domain.com/about 。

有什么方法可以实现吗?我已经查看了使用 htaccess 删除文件扩展名,但它们都没有做我想要的重定向到 index.php?page=。他们都想以不同的方式重定向。

编辑

我需要它是通用的。它不能只处理“关于”,我需要它来处理特定位置的任何内容。

【问题讨论】:

    标签: .htaccess


    【解决方案1】:

    如果这不是目录或文件,并且它有扩展名,则不带扩展名重定向:

    RewriteEngine On
    RewriteBase /
    
    RewriteRule   ^([a-zA-Z0-9]+)?$   index.php?page=$1 [L]
    
    RewriteCond   %{REQUEST_FILENAME}   !-d
    RewriteCond   %{REQUEST_FILENAME}   !-f
    RewriteRule   ^(.*)\..*$   $1 [R=301,L]
    

    【讨论】:

    • 这个我需要修改什么。我复制粘贴了,还是不行。我猜有些东西在..,但也许不是。我不是最擅长使用自定义 htaccess。
    • 你只需要复制它(我用你之前的规则编辑了我的答案)
    • 哦,好吧,我放错地方了。我把它放在我的规则之上。太好了,谢谢!像魅力一样工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多