我正在使用html/php
应用程序上的本地服务器,并且我试图使用Apache url重写模块而没有成功
该应用程序存储在./Compta/index.php
中。我必须在.htaccess
./Compta/.htaccess
个文件
我只想使用重写的网址:http://localhost/Compta/Test/
代替:http://localhost/Compta/index.php?page=test
并在用户尝试转到旧网址时重定向用户
.htaccess文件包含:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^([[:alnum:]]*)/$ /Compta/index.php?page=$1 [L]
RewriteRule ^([[:alnum:]]*)$ /Compta/index.php?page=$1 [L]
RewriteCond %{REQUEST_URI} ^/index\.php$
RewriteCond %{QUERY_STRING} ^page=([[:alnum:]]*)$
RewriteRule ^(.*)$ http://localhost/Compta/%1/ [L,R=301]
当我转到http://localhost/Compta/Test/
时,以下行正在运行,我的代码在div中包含test.php
的内容:
RewriteRule ^([[:alnum:]]*)/$ /Compta/index.php?page=$1 [L]
当我转到http://localhost/Compta/Test
时,以下行正在运行,但在Firefox中,该网址被重写为http://localhost/Compta/index.php?page=Test
,而http://localhost/Compta/Test2
则不会发生这种情况。该网址未被重写。
RewriteRule ^([[:alnum:]]*)$ /Compta/index.php?page=$1 [L]
要解决此问题并重定向旧网址,我添加了以下行:
RewriteCond %{REQUEST_URI} ^/index\.php$
RewriteCond %{QUERY_STRING} ^page=([[:alnum:]]*)$
RewriteRule ^(.*)$ http://localhost/Compta/%1/ [L,R=301]
但这不起作用,当我转到http://localhost/Compta/index.php?page=Test
时,该网址未被重写为http://localhost/Compta/Test/
提前谢谢
答案 0 :(得分:0)
我没有找到.htaccess的解决方案,但是我发现了一个用php,所以我在我的php文件中添加了以下几行:
if(preg_match("/\/Compta\/index\.php\?page=([[:alnum:]]*)/",@$_SERVER['REQUEST_URI'],$page)&&!empty($page[1]))
{
$new_url = "/Compta/";
switch (strtolower($page[1])) {
case "test":
$new_url = $new_url."Test/";
break;
case "test2":
$new_url = $new_url."Test2/";
break;
default:break;
}
header("Status: 301 Moved Permanently", false, 301);
header("Location: ".$new_url);
exit;
}
我测试网址是否以" /Compta/index.php开头?page ="如果有"页面"的参数 然后我初始化包含新url的变量 切换我参数的内容我修改了新的url 然后我重定向到我的新网址:)