Apache mod_rewrite的问题

时间:2015-02-01 08:32:53

标签: php apache .htaccess mod-rewrite

我决定使用mod_rewrite让我的网址看起来更好。我创建了非常简单的规则:

RewriteEngine on
RewriteBase /
RewriteRule ^(profile|contact|help|events|account|logout)/?$ index.php?p=$1 [NC]
RewriteRule ^home/?$ index.php [NC]
RewriteRule ^PlaceOrder/([0-9]+)/?$ index.php?p=mos&gc=$1 [NC]

它几乎运作良好,但它没有。因此,例如,[NC]应该使其不区分大小写。但是,出于某种原因,当我在浏览器中键入例如localhost/Help时,由于某些奇怪的原因,它会重定向到主页。 另一个问题是最后一条规则。如果我输入localhost/PlaceOrder/1,它会按预期工作并打开index?p=mos&gc=1。但在此之后,如果我点击“帐户”按钮,则浏览器会使用以下网址:localhost/PlaceOrder/account。哪个错了。它应该只使用localhost/account。为什么要在那里添加子目录?它仅在使用最后一条规则后才会发生。在使用最后一条规则之前,所有链接都可以正常运行。

1 个答案:

答案 0 :(得分:1)

由于规则以及index.php脚本中的某些内容,我猜测localhost/Help不是{not}&n。这些规则没有任何内容可以将Help重写到主页。

第二个问题是相对vs绝对URL问题。您可能在您的网页中使用了相对链接,并且因为您已经更改了相对网址基础(/PlaceOrder/所有相关链接都会包含在其中。您需要更改所有相关网址。指向绝对网址的链接(它们以/开头)或将其添加到您网页的标题中:

<base href="/" />