.htaccess 删除 index.php 并从 URL 中隐藏参数键

Posted

技术标签:

【中文标题】.htaccess 删除 index.php 并从 URL 中隐藏参数键【英文标题】:.htaccess remove index.php and hide parameter key from URLs 【发布时间】:2015-07-21 02:54:13 【问题描述】:

我有以下网址

www.example.com/index.php?tag= xxx

我想使用 .htaccess 使其如下所示

www.example.com/xxx

我用这段代码完成了:

 Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /

    RewriteCond %REQUEST_FILENAME !-f
    RewriteCond %REQUEST_FILENAME !-d 
    RewriteCond %REQUEST_FILENAME !-l
    RewriteRule ^(.+?)/?$ /index.php?tag=$1 [L,QSA]

如果我输入这个网址:

www.example.com/index.php?tag=1000

它被重定向到:

www.example.com/?tag=1000

如果:www.example.com/1000 它有效!

所以我有重复的 URL,这对 seo 不利。

如何将www.example.com/index.php?tag=1000 重定向到www.example.com/1000

【问题讨论】:

【参考方案1】:

将此代码用于 .htaccess 文件

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d 
RewriteCond %REQUEST_FILENAME !-l
RewriteRule ^(.+?)/?$ /index.php?key=$1 [L,QSA]

你的 index.php 代码将是

<?php 
echo $_REQUEST['key'];  
?>

然后调用 http://sitename.com/1000

输出将是:1000

【讨论】:

【参考方案2】:

如何将www.example.com/index.php?tag=1000 重定向到www.example.com/1000

您可以在RewriteBase 行下方插入此规则:

RewriteCond %THE_REQUEST /(?:index\.php)?\?tag=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=302,L,NE]

【讨论】:

我们不能再使用 $_GET['get'] 访问标签,如何解决这个问题? OP 现有的内部重写规则的目标是index.php?tag=$1,这将使您获得$_GET['get']

以上是关于.htaccess 删除 index.php 并从 URL 中隐藏参数键的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter:是不是可以在不使用 .htaccess 的情况下删除 index.php?

通过子目录中的 htaccess 删除 id 和 index.php

htaccess 从 url 中删除 index.php

htaccess帮助,需要强制www,https,并删除index.php

使用 www 强制 HTTPS 并在 CodeIgniter 中删除 index.php .htaccess

从 url (codeigniter) 中删除 index.php 时 .htaccess 防止显示文件