.htaccess url 重写有效但重定向无效
.htaccess url rewriting is working but not the redirection
我正在 html/php
应用程序上的本地服务器上工作,我正在尝试使用 Apache url 重写模块但没有成功
应用程序存储在 ./Compta/index.php
。我必须在 ./Compta/.htaccess
中创建一个 .htaccess
文件
我只想使用重写的 url,例如:http://localhost/Compta/Test/
而不是:http://localhost/Compta/index.php?page=test
并在用户尝试转到旧 url
时重定向用户
.htaccess 文件包含:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^([[:alnum:]]*)/$ /Compta/index.php?page= [L]
RewriteRule ^([[:alnum:]]*)$ /Compta/index.php?page= [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= [L]
当我转到 http://localhost/Compta/Test
时,以下行正在运行,但在 firefox 中 url 被重写为 http://localhost/Compta/index.php?page=Test
而 http://localhost/Compta/Test2
则不会发生这种情况; url 没有被重写。
RewriteRule ^([[:alnum:]]*)$ /Compta/index.php?page= [L]
为了解决这个问题并重定向旧的 url 我添加了这些行:
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
时,url 没有被重写为 http://localhost/Compta/Test/
提前致谢
我没有找到 .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;
}
我测试 url 是否以“/Compta/index.php?page= 开头并且是否有 "page" 的参数
然后我初始化包含新 url 的变量
切换我的参数内容我修改新的url
然后我重定向到我的新 url :)
我正在 html/php
应用程序上的本地服务器上工作,我正在尝试使用 Apache url 重写模块但没有成功
应用程序存储在 ./Compta/index.php
。我必须在 ./Compta/.htaccess
.htaccess
文件
我只想使用重写的 url,例如:http://localhost/Compta/Test/
而不是:http://localhost/Compta/index.php?page=test
并在用户尝试转到旧 url
时重定向用户.htaccess 文件包含:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^([[:alnum:]]*)/$ /Compta/index.php?page= [L]
RewriteRule ^([[:alnum:]]*)$ /Compta/index.php?page= [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= [L]
当我转到 http://localhost/Compta/Test
时,以下行正在运行,但在 firefox 中 url 被重写为 http://localhost/Compta/index.php?page=Test
而 http://localhost/Compta/Test2
则不会发生这种情况; url 没有被重写。
RewriteRule ^([[:alnum:]]*)$ /Compta/index.php?page= [L]
为了解决这个问题并重定向旧的 url 我添加了这些行:
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
时,url 没有被重写为 http://localhost/Compta/Test/
提前致谢
我没有找到 .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;
}
我测试 url 是否以“/Compta/index.php?page= 开头并且是否有 "page" 的参数 然后我初始化包含新 url 的变量 切换我的参数内容我修改新的url 然后我重定向到我的新 url :)