1

我需要为页面制定重写规则,但它不起作用。我确实为 apache 启用了 mod_rewrite

这是我的 .htacces 文件:

<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteRule ^gameofthrones/(full|house|characters)\.(all|Stark|Lannister)\.(html|xml|json)$ index.php?output=$3&house=$2&info=$1
</IfModule>

但是当我输入这个网址时:localhost/school/str-webservices/eindopdracht/index.php?output=html&house=all&info=full

它保持这种状态,但它应该类似于:localhost/school/str-webservices/eindopdracht/gameofthrones/full/all/html

我究竟做错了什么?

提前致谢,

标记

4

3 回答 3

1

您误解了 URL 重写的概念。

假设我重写/helloindex.php?get=hello. 这意味着它index.php?get=hello仍然可以工作,但是如果我写/hello,它会在引擎盖下将它映射到index.php?get=hello.

因此,当用户的地址栏阅读/hello时,他实际上是在查看index.php?get=hello

这不会取消index.php?get=hello,这并不意味着如果有人通过该 URL 访问该页面,它会将用户重定向到/hello.

于 2012-06-23T09:12:50.230 回答
1

添加另一条规则,它实际上将您的非重写 URL 重定向到重写的表单:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /school/str-webservices/eindopdracht/

    RewriteCond %{REQUEST_URI} ^school/str-webservices/eindopdracht/index\.php
    RewriteCond %{QUERY_STRING} ^output=([^&]*)&house=([^&]*)&info=([^&]*)$
    RewriteRule ^(.*)$ gameofthrones/%3.%2.%1? [R=301,L]

    RewriteRule gameofthrones/(full|house|characters)\.(all|Stark|Lannister)\.(html|xml|json)$ index.php?output=$3&house=$2&info=$1 [PT,NC,L]
</IfModule>

然后调用:localhost/school/str-webservices/eindopdracht/index.php?output=html&house=all&info=full它应该将您重定向到:localhost/school/str-webservices/eindopdracht/gameofthrones/full.all.html

于 2012-06-23T09:16:36.627 回答
0

我认为这可能是一个目录问题:

  • .htaccess文件位于目录树中的什么位置?
  • index.php文件在哪里?

如果index.php文件位于同一目录中(我假设相同的 ./school/str-webservices/eindopdracht/),您只需添加:

RewriteBase /school/str-webservices/eindopdracht/

after RewriteEngine On

如果我不明白这个问题,我很抱歉。

再见。

于 2012-06-23T09:33:09.633 回答