0

我需要 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 中完成这个,或者我需要编写一个独立的脚本?

4

1 回答 1

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 。

于 2013-05-31T04:27:18.123 回答