mod_rewrite,301 问题

mod_rewrite,301 问题

目前我可以通过两种方式访问​​特定站点:

 1. http://a.com/foo/bar
 2. http://a.com/index.php?url=foo/bar

我试图实现的是仅允许使用第一种方法来实现这一点,并在第二种方法上将 301 重定向到第一种方法。以下是我到目前为止编写并放入 .htaccess 的代码:

<IfModule mod_rewrite.c>  
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

  #tricky part
  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?url=?(.*)\ HTTP/
  RewriteRule ^index\.php$ http://a.com/$1 [R=301,L]
</IfModule>

目前它几乎所有的工作,它将 index.php 重定向到 /,但是将 index.php?url=foo/bar 重定向到 /?url=foo/bar,而我无法使其正确。TIA。

答案1

尝试这个

RewriteCond %{query_string} ^url=(.*)$
RewriteRule ^.*index.php$ /$1? [R=301]

相关内容