如何使用apache mod rewrite重写url和重定向?

如何使用apache mod rewrite重写url和重定向?,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我有网址: ipaddress/panelname/main/index.php 如何重建它 ipaddress/center/index.php ? 当然,我们可以看到另一个页面,不仅仅是index.php,还有这个url中的文件夹,我们可以永远看到 我尝试在.htaccess中执行此操作: RewriteEngine on RewriteRule ^center/([^/]+)/?$ panelname/main/$1 [L] RewriteRule ^/panelname(.*)$ /ce

我有网址:

ipaddress/panelname/main/index.php

如何重建它

ipaddress/center/index.php

?

当然,我们可以看到另一个页面,不仅仅是index.php,还有这个url中的文件夹,我们可以永远看到

我尝试在.htaccess中执行此操作:

RewriteEngine on
RewriteRule ^center/([^/]+)/?$ panelname/main/$1 [L]
RewriteRule ^/panelname(.*)$ /center$1 [QSA,L,R=301,NC]
Redirect 301 ^/panelname(.*)$ /center$1
但我看不到从panelname到center的重定向。 但如果我输入center,一切都会正常工作(但我不是舒尔,因为我的htaccess或symlink(我是在文件系统中创建的)可以正常工作)


如何将所有链接重写为其他链接,以及如何看到从旧链接重定向到新链接?谢谢。

在目录上下文(即.htaccess)中,重写规则从不以斜杠开头,因为公共前缀首先从匹配部分剥离

重定向
不匹配字符串,而不匹配正则表达式。在正则表达式上工作的变量是
RedirectMatch
。两者都只适用于绝对URL(以斜杠开头的URL)

您必须执行以下操作之一:

RewriteRule ^panelname(.*)$ /center$1 [R,L]
或:


测试完所有功能后,将
[R]
更改为
[R=301]
。如果您选择第二个选项,在测试一切正常后,只需将302更改为301。

如果您希望向访问者显示
/center/index.php
,并保留从旧URL到此URL的重定向,则需要一个重定向和一个重写规则(您已经拥有)

RedirectMatch 302 ^/panelname(.*)$ /center$1
RewriteEngine on

# external redirect from old URL to new one
RewriteCond %{THE_REQUEST} /panelname/main/(\S+) [NC]
RewriteRule ^ /center/%1 [R=302,L]

# internal forward from new URL to actual one
RewriteRule ^center/([^/]+)/?$ panelname/main/$1 [L]