我刚刚重做了我的网站,并尝试进行一些重写以将网址更改为新结构。我大部分都在那里,多亏了一对人的支持,但我知道他们不应该处理这些问题,所以我希望我能在这里得到最后一块拼图。
我想做四件事。
现在,这就是我所拥有的:
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”“重定向到同一地址”但是失败了,可能是因为循环。我不知道还有什么可以尝试,有什么想法吗?
答案 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]