2015-08-27 124 views
0

我最近更新了我的网站使用:的的.htaccess国防部重写查询字符串重定向到一个路径

www.website.com/path/123456 

代替:

www.website.com/path/file.php?id=123456 

为了不打破旧的链接/书签,我想将旧的查询字符串重定向到新的路径。

我已经试过:

RewriteRule ^path/file.php?id=?$ /path/$1 [L,R] 

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC] 
RewriteRule ^path/.* /path/$1 [R] 

RewriteCond %{REQUEST_URI} ^/path/$ [NC] 
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC] 
RewriteRule .* /path/$1 [R] 

RewriteCond %{REQUEST_URI} ^/path/file.php$ [NC] 
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC] 
RewriteRule .* /path/$1 [R] 

,并有一些变化,但没有运气。我如何设置我的.htaccess来执行此重定向?

回答

0

貌似问题是你的正则表达式是不是捕捉参数,像这样:

RewriteRule ^path/file.php?id=(.*)$ /path/$1 [L,R] 

在正则表达式中使用括号来捕捉你想稍后引用,就像$1部分字符串。 .*将匹配任何东西。所以,如果你想捕捉数字,例如,你可以将它改为(\d+)

+0

这并没有为我工作,没有发生任何事情我刚刚访问过的链接正常人一样。 – sharf

0

您可以在DOCUMENT_ROOT/.htaccess文件中使用此代码:

RewriteEngine On 
RewriteBase/

# external redirect from actual URL to pretty one 
RewriteCond %{THE_REQUEST} /path/file\.php\?id=(\d+) [NC] 
RewriteRule^/path/%1? [R=302,L,NE] 

# internal forward from pretty URL to actual one 
RewriteRule ^path/(\d+)/?$ path/file.php?id=$1 [L,QSA,NC] 
+0

这不适合我,没有任何事情发生,我只是像正常访问链接。 – sharf

+0

.htaccess位于根(位于'/ path /'之上)。还有其他的规则,但我已经尝试重新安排和删除其他人,使其工作。 – sharf

+0

'/ path /'没有自己的.htaccess,在应用程序的根目录中只有一个。它确实有更多的规则。当删除所有的规则,并用你给我的东西替换文件时,我得到一个404页面,并且在这个服务器上没有找到请求的URL /path/file.php.' – sharf