0

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

我想做四件事。

  1. 将空格转换为下划线。
  2. 通过将“(2003)”等内容更改为“- 2003”来去掉括号。
  3. 更改 html 调用的结构。
  4. 强制重定向,以便搜索引擎获得新地址。

现在,这就是我所拥有的:

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”“重定向到同一地址”,但失败了,可能是因为循环。我不确定还有什么可以尝试的,有什么想法吗?

4

1 回答 1

0

前 3 条规则的迭代过程似乎存在一些问题,请尝试向[L]它们添加标志。

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

第三个问题是你RewriteCond只适用于第一条规则。RewriteConds 仅适用于紧随其后的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]
于 2012-09-25T02:06:58.180 回答