2

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

mysite.com/index.php?/about

谷歌已经用那个 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 在此先感谢您的帮助。

4

2 回答 2

2

我认为您可以稍微改进规则。

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

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

我不知道你为什么首先使用QSA。我认为这是之前问题的一部分。只是为了练习,您可以尝试移除QSA并看看会发生什么。

于 2013-06-13T04:19:22.427 回答
1

你应该试试这个。

RewriteCond %{QUERY_STRING} ^/[a-z]+$ [NC]
RewriteRule ^/index.php$ %{QUERY_STRING} [NC,L,R=301]
于 2013-06-13T06:31:06.330 回答