2015-11-15 3 views
1

Так как мы упростили URL-адреса наших профилей от example.com/category/profile/ до example.com/profile и т. Д. (Включая автоматическое удаление всех завершающих косых черт - см. Vanity URLs without trailing slashes), теперь нам нужно перенаправить все входящие ссылки, привязанные к старым URL-адресам. Мы нашли способ сделать это со следующим кодом (который также исключает файлы и каталоги, которые нам нужно сохранить).Перенаправление содержимого каталога, но не самого каталога, а также некоторых его подкаталогов и файлов

RewriteCond %{REQUEST_URI} !^/category/index [NC] #Excludes /category/index.html from redirect 
RewriteCond %{REQUEST_URI} !^/category/images [NC] #Excludes /category/images/ from redirect 
RewriteCond %{REQUEST_URI} !^/category/menu [NC] #Excludes /category/menu/ from redirect 
RewriteRule ^category/(.+[^/]) /$1 [R=301,NC,L] 

Но это работает только в том случае, если мы сохраним все исходные каталоги, содержащие наши индивидуальные профили; если мы удалим эти каталоги, перенаправление перестанет работать. Мы попробовали ниже, но это не помогло.

RewriteCond %{REQUEST_URI} !^/category/index [NC] 
RewriteCond %{REQUEST_URI} !^/category/images [NC] 
RewriteCond %{REQUEST_URI} !^/category/menu [NC] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^category/(.+[^/]) /$1 [R=301,NC,L] 

Мы искали в качестве альтернативы (и гораздо проще) способ сделать это, используя RedirectMatch (код ниже), но мы не нашли способ, чтобы исключить каталоги, мы должны сохранить, и это также не удалить любые конечные косые черты от исходных, входящих ссылок.

RedirectMatch 301 ^/category/(.*)$ /$1 

ответ

1

Try:

RedirectMatch ^/category/((?!index|images|menu|foo|bar)[^/]+)/?$ /$1 
+1

Эй @Starkeen - ты гений - это работает! Мы будем внедрять это в FASHION NET сразу. Спасибо вам!!!! – haadaa

Смежные вопросы