301将一些请求重定向到目录中不存在的文件,而将404重定向到所有其他文件

时间:2013-05-30 23:26:31

标签: .htaccess redirect http-status-code-404 http-status-code-301

我需要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中完成此任务,还是需要编写一个独立的脚本?

1 个答案:

答案 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