urt重写与htaccess无法正常工作

时间:2015-07-18 13:50:42

标签: .htaccess url-rewriting

我正在尝试在我的网站中重写我的网址,以便在斜杠作为参数传递后(example.com/Page转到example.com/index.php?page=Page)) 这里的代码不起作用(它给出了Forbidden):

RewriteEngine On
RewriteRule   ^/(.+)/$   /index.php?page=$1   [L]

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

这是我在你的问题的评论中建议的:

RewriteEngine On
RewriteCond   %{REQUEST_FILENAME} !-f
RewriteCond   %{REQUEST_FILENAME} !-d
RewriteCond   %{REQUEST_URI}   !^/index\.php
RewriteRule   ^(.+)$   /index.php?page=$1   [L,B]

前导斜杠在.htaccess样式文件中没有意义,因为你不会在那里处理绝对誓言,而是处理相对的誓言。关于尾部斜杠:您的示例没有显示这样的斜杠,那么为什么要在正则表达式中使用它?它导致您的模式不匹配任何东西,但请求以斜杠终止。这不是你想要的。

RewriteCond行仍然允许访问物理现有文件和目录,并防止无限循环,但这不应该仅在内部重写时发生。并且您需要B标志来转义要指定为GET参数的请求URL的部分。

最后一个条件实际上是过时的,因为显然/index.php应该是一个文件。我留下来进行演示。

一般来说,查看apaches重写模块的文档是一个非常好的主意:httpd.apache.org/docs/current/mod/mod_rewrite.html

写得很好,非常精确,包含很多非常好的例子。它应该回答你所有的问题。