我需要301将目录/ SOMESLUG /中40个特定的已破坏URL重定向到正确/新页面,同时为/ SOMESLUG /中不存在的所有其他页面返回404错误。
我们正在使用类似的东西(注意名称不遵循示例中的简单模式):
Redirect 301 /SOMESLUG/wrong1.html /SOMESLUG/right1.html
Redirect 301 /SOMESLUG/wrong2.html /SOMESLUG/right2.html
...
Redirect 301 /SOMESLUG/wrong40.html /SOMESLUG/right40.html
但是,只要我们有规则
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/SOMESLUG/(.*)
RewriteRule ^(.*)$ /sumeslug [R=404,L]
在htaccess文件中(即使在301重定向指令之后),重定向失败,只返回404页面。
有没有办法在htaccess中完成此任务,还是需要编写一个独立的脚本?
答案 0 :(得分:0)
你绝对可以在.htaccess中做到这一点。只是不要混合使用mod_alias和mod_rewrite。最好通过mod_rewrite来处理它。
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteRule ^SOMESLUG/wrong1\.html$ /SOMESLUG/right1.html [L,R=301,NC]
RewriteRule ^SOMESLUG/wrong2\.html$ /SOMESLUG/right2.html [L,R=301,NC]
# will not be executed for real files, directories or links
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^SOMESLUG(/.*|)$ - [R=404,L]
如果您可以控制Apache配置,我强烈建议您使用RewriteMap。