定位并重写一个URL而忽略任何其他URL,问题在于其他URL部分匹配它

时间:2013-10-24 06:16:11

标签: regex mod-rewrite regex-negation

我首先用尽了我的耐心,然后我的精力,最后我的理智,试图重写一个主页的重写:

http://www.mydomain.com/index.php

http://www.mydomain.com/

我确实成功完成了类似的事情:

RewriteRule ^/index\.php$ /$ [R=301,L]

然而,问题是其他网址都是这样完成的

http://www.mydomain.com/index.php?page=this-is-a-page-title

这使得之前的重写打破了他们的转变:

http://www.mydomain.com/?page=this-is-a-page-title

我还没有设法正确地写一个重写来排除包含字符串

的所有网址
index.php?page=

或者最好是直接定位到主页,这会让我在网址之后找一些东西,比如

http://www.mydomain.com/index.php(here)

这会告诉mod_rewrite没有比那更长的网址,但是我无法理解如何只使用rewriterule或者使用request_uri的重写来实现它!样即可。实际上在这里发现了一个帖子,其中ppl声明正则表达式是匹配某些东西,并且根本没有效率来尝试匹配任何东西。我已经尝试了将近一百个,用我最好的知识重新制作它们,并且大多数都没有工作,有些直接打破网址,甚至500个错误。

您决定自己感觉更有效的解决方案。

我学到的东西比我对正则表达式和mod_rewrite几乎一无所知,但我想我已经超越了这一点,我应该寻求一些帮助。我已经尝试了两天,阅读了很多,在这里和那里,apache文档,我感觉我已经过去几乎触及工作线,可能在标点符号中有些错误。我也有兴趣理解这里显示的内容,以解决我对于正则表达式或者如何正确地按照正确的顺序进行重写或重写这样的误解。

1 个答案:

答案 0 :(得分:1)

您可以使用RewriteCond来规定以下重写规则。像这样:

RewriteCond %{QUERY_STRING} =""
RewriteRule ^/index\.php$ / [R=301,L]

这里的条件是查询字符串为空,这似乎是你想要的。