在Drupal中,如何使用.htaccess从?q=重定向到清理URL?

在Drupal中,如何使用.htaccess从?q=重定向到清理URL?,.htaccess,redirect,drupal,.htaccess,Redirect,Drupal,在标记为副本之前,请仔细阅读 我正在管理一个drupal站点,我被要求将URL清理干净 因此,我创建了.htaccess文件,并启用了drupal文档中描述的干净URL。这一切都很容易,效果也很好 问题是有数千个实习生链接是手动添加的(包含讨厌的?q=,以前的网站管理员有点…) 我不想编辑所有这些网站,只是太多了。 这就是为什么我喜欢只添加2行或3行.htaccess 重定向的一个例子是: http://www.tuteorica.com/?q=galeria/via/clases to htt

在标记为副本之前,请仔细阅读

我正在管理一个drupal站点,我被要求将URL清理干净

因此,我创建了
.htaccess
文件,并启用了drupal文档中描述的干净URL。这一切都很容易,效果也很好

问题是有数千个实习生链接是手动添加的(包含讨厌的
?q=
,以前的网站管理员有点…)

我不想编辑所有这些网站,只是太多了。 这就是为什么我喜欢只添加2行或3行
.htaccess

重定向的一个例子是:

http://www.tuteorica.com/?q=galeria/via/clases
to
http://www.tuteorica.com/galeria/via/clases
到目前为止,我有这个
.htaccess
文件:

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

#RewriteCond %{QUERY_STRING} ^q=(.*=)$
#RewriteRule ^ http://www.%{HTTP_HOST}/%1 [R=301,L]

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L,QSA] 
注释的行是我试图使其工作的行。有可能吗?我的方向对吗


我知道这不是最好的解决方案,我只是想让它工作。

您可以使用以下htaccess

RewriteEngine on
#non www to www
RewriteCond %{HTTP_HOST} !^www
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [NE,L,R]
#/?q=foobar to /foobar

RewriteCond %{THE_REQUEST} /\?q=([^\s]+) [NC]
RewriteRule ^ /%1? [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /?q=$1 [L]

你能把这句话和其他的话放在一起吗?我不想因为顺序不对而把事情搞得一团糟?谢谢有没有一种方法可以保证非ASCII字符的安全?以前的版本产生了500服务器错误,但现在可以了。谢谢@starkeen。