我一直在与mod-rewrite斗争一段时间。
基本上,我有一个网站,我正在转移到一个不同的命名空间/目录。
我想做的是更改看起来像这样的网址:
http://mydomain.com/index.php?a=xxxxxxxxxx
这些网址将始终包含“index.php?a =”。我有一个不同的/新网站也有一个index.php文件,所以只有当a =在URL中时才重写。
新网址应该像
http://mydomain.com/ns1/index.php?a=xxxxxxxxxxx
看起来很简单,但我似乎无法让mod_rewrite为我做这件事,这就是我所拥有的:
#
将旧网址重写为新的命名空间
RewriteRule ^ / index.php \?a =(。*)$ /gc1/index.php\?x=1&a=$1 [R = 301,L]
看错了什么?
答案 0 :(得分:1)
您可以使用此规则为路径添加前缀:
RewriteRule !^ns1/ /ns1%{REQUEST_URI} [L]
如果路径尚未启动,则此规则将URI路径前缀为/ns1
。
答案 1 :(得分:1)
我相信RewriteRule仅对路径有效(即,它不会考虑您添加的任何查询参数。)
你最好在PHP文件本身中这样做。
// On old site
if($_GET['a']=="xxxxxxx"){
header("Location: /ns1/index.php?a=".$_GET['a']);
die();
}
答案 2 :(得分:0)
感谢你们两位。
我能够做到:
# rewrite old urls to new ns1 namespace
RewriteCond %{QUERY_STRING} ^a=.*$
RewriteCond %{REQUEST_URI} !^/ns1/.*$
RewriteRule ^(.*)$ ns1$1 [R=301,L]