我正在尝试在我的网站中重写我的网址,以便在斜杠作为参数传递后(example.com/Page
转到example.com/index.php?page=Page
))
这里的代码不起作用(它给出了Forbidden):
RewriteEngine On
RewriteRule ^/(.+)/$ /index.php?page=$1 [L]
任何帮助将不胜感激
答案 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
写得很好,非常精确,包含很多非常好的例子。它应该回答你所有的问题。