.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帮助,需要强制www,https,并删除index.php