即使输入了未重写的URL,如何强制mod_rewrite RewriteRule显示为重写

时间:2011-03-15 14:52:43

标签: php apache mod-rewrite url-rewriting rewrite

是否有可能使url重写被强制?

以下是有效的示例,http://localhost/home/转到http://localhost/index.php?page=home,但网址与用户保持一致。

我无法工作的是迫使http://localhost/index.php?page=home显示为 http://localhost/home/

我不知道我是否使用了正确的术语,但我想要它,这样如果你输入非重写的网址,我希望重写的网址出现在用户的浏览器中。

这是我到目前为止所做的工作:

RewriteEngine on
Options +FollowSymLinks

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond $1 !^(index\.php)
RewriteRule ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/?$ index.php?page=$1&a=$2&b=$3 [L,NC,QSA]

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond $1 !^(index\.php)
RewriteRule ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)$ index.php?page=$1&a=$2 [L,NC,QSA]

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond $1 !^(index\.php)
RewriteRule ^([a-zA-Z0-9_]*)$ index.php?page=$1 [L,NC,QSA]

2 个答案:

答案 0 :(得分:1)

这就是[R]标志的用途。如果你有正确的重写,你需要在你的RewriteRule末尾添加[R]到你的其他标志。

答案 1 :(得分:0)

尝试在index.php中添加一些代码。

查看$_SERVER['SCRIPT_URL']变量以获得答案。当您在浏览器中输入“localhost / index.php?page = home”时,SCRIPT_URL应该等于'/index.php'。如果输入“localhost / home”,SCRIPT_URL应该等于'/ home'。您可以在PHP脚本中对此进行检查,并从那里进行适当的重定向。