【发布时间】:2016-11-18 23:23:15
【问题描述】:
我最近更新了一个旧网站,我想将所有旧页面 301 转换为每个页面的新版本。
这是我的 .htaccess
Options +FollowSymlinks -MultiViews
RewriteEngine On
#
# below are the 301 redirects
# **rules**
#
# below are the RewriteCond
# **rules**
#
# other stuff
#
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+?)/?$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ /$1 [R=301,L]
问题是一些旧链接的扩展名为oldfile.html,其他只是文件夹oldfolder/。
在新版本上有products、products/category和products/category/subcategory。这些网址是使用RewriteCond 生成的。
以下规则有效:
Redirect 301 /category/ /products/category
以下内容不起作用,而是将我重定向到主页。
Redirect 301 /old-folder/subcategory.html /products/category/subcategory
# /products/category/subcategory is also a RewriteRule
这是.htaccess中的确切代码
# 301 rule
Redirect 301 /arredo-urbano/blocchi-standard.html /prodotti/arredo-urbano/001-blocchi-standard
# RewriteRule
RewriteRule ^prodotti/([^/]+)/([^/]+)/?$ prodotti.php?category=$1&subcategory=$2 [L]
我尝试在每个 Redirect 301 之后添加 [L] 标志,因此 .htaccess 的其余部分被忽略,但这会导致 500 Internal Error
所有重定向都是手动声明的,没有正则表达式或通配符,而且拼写正确。
有没有办法让所有重定向按预期工作?另外我不明白的是为什么[L] 标志会导致内部错误。
谢谢
【问题讨论】:
标签: apache .htaccess redirect mod-rewrite