php - URL Mod 重写

标签 php codeigniter mod-rewrite url-rewriting

我在我的网站上使用 codeigniter,之前总是有那个 index.php?在我的每个网址或链接上,例如

mysite.com/index.php?/about

Google 已使用该 index.php 将我的所有网址编入索引?我想删除它并在没有它的情况下重定向它。我在重写 URL 并将其重定向到 mysite.com/about 时遇到问题,这是我迄今为止尝试过的

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?(/[^\s\?]+)? [NC]
RewriteRule ^ %1/ [QSA,L,R=301]

发生的事情是,它只删除了index.php, 例如 mysite.com/index.php?/about 将转向 mysite.com/?/about 我不知道如何删除该问号,

我不擅长 mod_rewrite 提前感谢您的帮助。

最佳答案

我认为你可以稍微改进一下规则。

RewriteCond %{REQUEST_URI}?%{QUERY_STRING} index\.php?\?.+
RewriteRule .*$ %{QUERY_STRING}? [R=301,L]

本质上,您不必担心 %{THE_REQUEST} 中的整个请求行,这会删除所有复杂的正则表达式。此外,该规则会重定向到 %{QUERY_STRING} 中列出的任何内容,并删除查询字符串。

我不确定您为什么首先使用QSA。我认为这是早些时候问题的一部分。作为练习,您可以尝试删除 QSA 并看看会发生什么。

关于php - URL Mod 重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078794/

相关文章:

apache - 尝试添加强制 HTTPS 规则时的 .htaccess 重定向循环 (Amazon Elastic Beanstalk)

regex - htaccess 比较 cookie 值并在评估返回 true/false 时重定向

php - 带有位置占位符的 MySQL SELECT IN 仅根据字符串中的第一个值进行选择/过滤

php - 为什么这个 PDO 语句会默默地失败?

php - Mysql DATE_SUB() 和 codeigniter 事件记录问题?

php - 如何从 3 个表中获取数据?功能

php - Codeigniter 中的 URI 路由

php - 删除文件扩展名 htaccess 不起作用

php - 得到奇怪的结果 : mysqli_fetch_array() expects parameter 1 to be mysqli_result

php - 如何使用 Laravel 将二进制数据插入数据库?