【问题标题】:In Drupal how to redirect from ?q= to clean URL using .htaccess?在 Drupal 中,如何使用 .htaccess 从 ?q= 重定向到清理 URL?
【发布时间】:2017-01-31 12:11:14
【问题描述】:

标记为重复之前请仔细阅读。

我正在管理一个 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 redirect drupal


    【解决方案1】:

    可以使用下面的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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2021-05-18
    • 2014-09-25
    • 1970-01-01
    相关资源
    最近更新 更多