Перенаправление .htaccess, если файл или каталог второго уровня не существует - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть ситуация, когда у меня есть куча старого контента в каталоге / products. В дальнейшем новый контент собирается в папке / product. Я хотел бы перенаправить на / product, если файл или каталог не существует.

У меня есть следующее в файле .htaccess в папке / products:

RewriteEngine On
RewriteCond   %{REQUEST_FILENAME} !-f
RewriteCond   %{REQUEST_FILENAME} !-d
RewriteRule   ^(.*)$ /product/$1 [R=301,L]

Это хорошо работает для файлов в каталоге / products и подкаталогах, которые содержат файлы index.htm или другие имена файлов, однако я бы хотел ограничить перенаправление для несуществующего каталога двумя уровнями:

/ products / someproduct - Не перенаправлять

/ продукция / someproduct / anotherproduct Если он не существует, перенаправьте его в / product / someproduct / anotherproduct

Как заставить правило применяться только к подкаталогам глубиной 2 или более уровней?

1 Ответ

0 голосов
/ 09 декабря 2011

Попробуйте следующее

RewriteEngine On
RewriteBase /

#for all /products/somefolder/any_folder_level_deeep content
RewriteCond %{REQUEST_URI} ^/products/([^/]+/.+)$ [NC]
#if file does not exist
RewriteCond   %{REQUEST_FILENAME} !-f
#and directory does not exist
RewriteCond   %{REQUEST_FILENAME} !-d
#redirect to product folder
RewriteRule   . /product/%1 [R=301,L]
...