Apache 的问题 mod_rewrite
Problems with Apache mod_rewrite
我决定使用 mod_rewrite
让我的 URL 看起来更好看。我创建了非常简单的规则:
RewriteEngine on
RewriteBase /
RewriteRule ^(profile|contact|help|events|account|logout)/?$ index.php?p= [NC]
RewriteRule ^home/?$ index.php [NC]
RewriteRule ^PlaceOrder/([0-9]+)/?$ index.php?p=mos&gc= [NC]
它几乎可以正常工作,但事实并非如此。因此,例如,[NC]
应该使其不区分大小写。但是,出于某种原因,当我在浏览器中键入 localhost/Help
时,出于某种奇怪的原因,它会重定向到主页。
另一个问题是最后一条规则。如果我输入 localhost/PlaceOrder/1
,它会按预期工作并打开 index?p=mos&gc=1
。但是在那之后,如果我点击,例如,Account 按钮,浏览器会使用这个 URL: localhost/PlaceOrder/account
。这是错误的。它应该只使用 localhost/account
。为什么要在其中添加该子目录?它仅在使用最后一条规则后发生。在使用最后一条规则之前,所有链接都运行良好。
我猜测 localhost/Help
不是因为规则,也不是因为您的 index.php 脚本中的某些内容。这些规则没有做任何可能将 Help
重写到主页的事情。
第二个问题是相对与绝对URL的问题。您可能在页面中使用了相对链接,并且因为您已经更改了相对 URL 基数(即 /PlaceOrder/
所有相对链接都将在其前面添加。您需要更改所有指向绝对 URL 的链接(它们以 /
开头)或将其添加到您页面的 header:
<base href="/" />
我决定使用 mod_rewrite
让我的 URL 看起来更好看。我创建了非常简单的规则:
RewriteEngine on
RewriteBase /
RewriteRule ^(profile|contact|help|events|account|logout)/?$ index.php?p= [NC]
RewriteRule ^home/?$ index.php [NC]
RewriteRule ^PlaceOrder/([0-9]+)/?$ index.php?p=mos&gc= [NC]
它几乎可以正常工作,但事实并非如此。因此,例如,[NC]
应该使其不区分大小写。但是,出于某种原因,当我在浏览器中键入 localhost/Help
时,出于某种奇怪的原因,它会重定向到主页。
另一个问题是最后一条规则。如果我输入 localhost/PlaceOrder/1
,它会按预期工作并打开 index?p=mos&gc=1
。但是在那之后,如果我点击,例如,Account 按钮,浏览器会使用这个 URL: localhost/PlaceOrder/account
。这是错误的。它应该只使用 localhost/account
。为什么要在其中添加该子目录?它仅在使用最后一条规则后发生。在使用最后一条规则之前,所有链接都运行良好。
我猜测 localhost/Help
不是因为规则,也不是因为您的 index.php 脚本中的某些内容。这些规则没有做任何可能将 Help
重写到主页的事情。
第二个问题是相对与绝对URL的问题。您可能在页面中使用了相对链接,并且因为您已经更改了相对 URL 基数(即 /PlaceOrder/
所有相对链接都将在其前面添加。您需要更改所有指向绝对 URL 的链接(它们以 /
开头)或将其添加到您页面的 header:
<base href="/" />