在GET元素中设置URL子目录

时间:2017-11-11 21:49:12

标签: php apache .htaccess mod-rewrite

我的服务器上有以下目录:

Document Root
|
|- index.php 
|
|- /wiki
|    |
|    |-index.php
|    |
|    |-home.md
|    | 
|    |-foo.md
|    |
|    |-folder
|    |   |
|    |   |- foo.md

... and so on

我想重写Wiki路径的ULR。例如:

  

http://DOMAIN.tld/wiki/foo

应该是服务器端

  

http://DOMAIN.tld/wiki/?page=foo

  

http://DOMAIN.tld/wiki/folder/foo

应该是服务器端

  

http://DOMAIN.tld/wiki/?page=folder/foo

我的想法是,将子目录转换为GET元素。在PHP中,我可以通过/拆分目录并执行我的评估(PHP)。在wiki文件夹可以是无限子文件夹之后。

我使用Apache(Plesk as Webserver)和PHP 7。

我尝试了.htaccess中的代码:

RewriteEngine on
RewriteRule ^/wiki/(.*) /wiki/?page=$1

和我的用于测试的PHP代码(/wiki/index.php)

echo 'Hello Wiki';    
echo $_GET['page'];

如果我致电http://DOMAIN.dtl/wiki,我会收到维基页面。 如果我拨打http://DOMAIN.dtl/wiki/test,我会收到404错误。

我的问题是:我的错误在哪里。我非常感谢每一个提示。

编辑:

将我的htaccess文件更改为:

RewriteEngine on
RewriteRule ^wiki/(.*) wiki?page=$1

现在我收到以下错误消息(浏览器Safari):ERROR: Too many redirections

1 个答案:

答案 0 :(得分:1)

由于相同的网址格式和目标路径sincr wiki / index.php?page = 也匹配模式,因此会出现重写循环错误 ^ wiki /(.*)。要解决此问题,您需要排除目标路径:

 RewriteEngine on
 RewriteCond ℅{REQUEST_URI} !^/wiki/index.php$ 
 RewriteRule ^wiki/(.*) wiki?page=$1