使用.htaccess中的mod_rewrite重写URL

时间:2009-05-20 08:02:10

标签: .htaccess mod-rewrite url-rewriting

我正在尝试使用mod_rewrite apache模块重写URL。 我试着用它如下:

Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^wants/testing.htm wants.php?wantid=$1 [L]

我在访问文件的目录中创建了一个.htaccess文件。

还启用了mod_rewrite。 完成所有这些后,我仍然无法使其正常工作。

有人可以帮我这个吗?如果我错过了什么,请告诉我

先谢谢, Gnanesh

4 个答案:

答案 0 :(得分:2)

根据OP的评论:

  

网址显示   mydomain.com/wants.php?wantid=123。一世   需要让它看起来像   mydomain.com/wants/123

这适用于您的情况:

RewriteEngine on
RewriteBase /
RewriteRule ^wants/([0-9]+)$ /wants.php?wantid=$1 [L]

它允许您使用 http://yoursite.com/wants/123 并默默地将其重写为 wants.php?wantid = 123

答案 1 :(得分:0)

我认为一个主要的斜线(或者说缺乏斜线)可能是yoru问题:

Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^wants/testing.htm /wants.php?wantid=$1 [L]

否则Apache可能会在/wants/wants.php中查找PHP文件,因为它会将其视为相对URL。

答案 2 :(得分:0)

嗯,所以我给了它一些想法,我想你可以做这样的事情(如果我理解正确,只根据你的评论改变了正则表达式):

Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^wants/\d+$ /wants.php?wantid=$1 [L]

但我想你也可以省去$ 1引用,但仍然可以访问wants.php中的ID。所以

RewriteRule ^wants/\d+$ /wants.php [L]

也应该有效,然后您可以使用类似

的内容
<?php 
    $request = split('/', $_SERVER["REQUEST_URI"])[1];
?>

在你的wants.php数组的最后一个元素是你的id(或者你决定重写并发送到脚本的任何其他内容)。

答案 3 :(得分:0)

如果要在 want 目录中的.htaccess文件中使用该规则,则必须从模式的开头剥离上下文wants/。所以只是:

RewriteEngine on
RewriteRule ^([0-9]+)$ /wants.php?wantid=$1 [L]

否则,如果要在根目录中的.htaccess文件中使用该规则:

RewriteEngine on
RewriteRule ^wants/([0-9]+)$ wants.php?wantid=$1 [L]