如何重写url和重定向与Apache mod重写?
问题描述:
我有网址:如何重写url和重定向与Apache mod重写?
ip地址/ panelname /主/ index.php文件
如何来重建到
ip地址/中心/ index.php文件
?
of course我们可以看到另一个页面,不仅index.php,而且这个文件夹在url中我们可以永远看到。
我tryed这样做在.htaccess:
RewriteEngine on
RewriteRule ^center/([^/]+)/?$ panelname/main/$1 [L]
RewriteRule ^/panelname(.*)$ /center$1 [QSA,L,R=301,NC]
Redirect 301 ^/panelname(.*)$ /center$1
,但我没有看到panelname重定向到中心。 但如果我输入中心一切运作良好的(但我不舒尔,它在我的htaccess或符号连接,这点我是在文件系统创建工作良好)
如何重写所有到另一个链接和HOWTO看重定向从旧的链接到我的新?谢谢。
答
RewriteRule
在目录上下文(即.htaccess是)中,永远不会以斜杠开始,因为公共前缀会先从匹配部分中剥离。
Redirect
确实匹配字符串,而不是正则表达式。在正则表达式上工作的变体是RedirectMatch
。两者都只能使用绝对URL(以斜线开头)。
你要么必须做到以下几点:
RewriteRule ^panelname(.*)$ /center$1 [R,L]
或:
RedirectMatch 302 ^/panelname(.*)$ /center$1
变化[R]
到[R=301]
一旦你已经测试一切正常。如果您选择第二个选项,则在测试一切正常后才将302更改为301。
答
如果你想给访问者显示/center/index.php
并保持从旧URL到这个URL的重定向,那么你将需要一个重定向和一个重写规则(你已经拥有)。
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]