使用重写强制浏览器刷新而不进一步更改URL?

时间:2012-09-24 20:36:54

标签: apache .htaccess rewrite

我刚刚重做了我的网站,并尝试进行一些重写以将网址更改为新结构。我大部分都在那里,多亏了一对人的支持,但我知道他们不应该处理这些问题,所以我希望我能在这里得到最后一块拼图。

我想做四件事。

  1. 将空格转换为下划线。
  2. 通过将“(2003)”更改为“ - 2003”来删除括号。
  3. 更改html通话的结构。
  4. 强制重定向,以便搜索引擎获取新地址。
  5. 现在,这就是我所拥有的:

    RewriteEngine On
    Rewritecond %{HTTP_HOST} ^(desktopscenes.com|www.desktopscenes.com)$ [nc]
    RewriteRule ^(.*)\s(.*)$ $1_$2 [N]
    RewriteRule ^(.*)\((.*)$ $1-_$2
    RewriteRule ^(.*)\)(.*)$ $1$2
    RewriteRule ^(.*)slides/(.*)\.html$ /$1index.htm#$2.jpg [NE,R=301]
    

    一切正常,除了jpg文件的链接,内部正确重定向,但我找不到在地址栏上显示正确的新地址的方法。

    例如,这个旧网址:

    http://www.desktopscenes.com/Scenes from Big Sky Country (2003)/slides/First Montana Sunset.jpg
    

    正确显示图像:

    http://www.desktopscenes.com/Scenes_from_Big_Sky_Country_-_2003/slides/First_Montana_Sunset.jpg
    

    但是浏览器栏没有显示新地址,我认为这也意味着搜索引擎没有收到新地址的通知。

    我尝试使用“R = 301”“重定向到同一地址”但是失败了,可能是因为循环。我不知道还有什么可以尝试,有什么想法吗?

1 个答案:

答案 0 :(得分:0)

看起来迭代过程中存在一些与前3条规则有关的问题,请尝试向它们添加[L]标记。

第二个问题是你最后一条规则中的正则表达式(带有“幻灯片”)与 html 匹配,但是你给它 jpg

第三个问题是您的RewriteCond仅适用于第一条规则。 RewriteCond仅适用于紧随其后的RewriteRule。它们不会在全球范围内应用。

因此,请尝试将规则更改为:

RewriteEngine On

# if the host isn't "desktopscenes.com", pass through and do nothing
Rewritecond %{HTTP_HOST} ^(desktopscenes.com|www.desktopscenes.com)$ [nc]
RewriteRule ^ - [L]

RewriteRule ^(.*)\s(.*)$ /$1_$2 [L]
RewriteRule ^(.*)\((.*)$ /$1-_$2 [L]
RewriteRule ^(.*)\)(.*)$ /$1$2 [L]

RewriteRule ^(.*)slides/(.*)\.(jpe?g|gif|png|bmp) /$1index.htm\#$2.$3 [NE,R=301,L]