我认为在这种情况下,您应该指定发生错误时需要的内容,并且从一个到另一个,然后使用特定的代码来处理它。例如,以下代码将逐级处理错误请求,但当然它仅限于/1/2/3/4/5,因此,将通过启动最新的一个等来处理更多的级别:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/(.*)/(.*)/(.*)/(.*)$
RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)$ /$1/$2/$3/$4 [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/(.*)/(.*)/(.*)$
RewriteRule ^(.*)/(.*)/(.*)/(.*)$ /$1/$2/$3 [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/(.*)/(.*)$
RewriteRule ^(.*)/(.*)/(.*)$ /$1/$2 [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/(.*)$
RewriteRule ^(.*)/(.*)$ /$1 [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteRule ^(.*)$ / [L,R]
所以,如果article-name/ 目录存在,则请求http://example.com/2018/12/05/article-name/removethis 将是http://example.com/2018/12/05/article-name/,否则如果05/ 目录存在则转到http://example.com/2018/12/05/,依此类推。
注意:上面的代码可以更概括为以下形式:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/(.*)/(.*)/(.*)/(.*)$
RewriteRule ^ /%1/%2/%3/%4 [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/(.*)/(.*)/(.*)$
RewriteRule ^ /%1/%2/%3 [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/(.*)/(.*)$
RewriteRule ^ /%1/%2 [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/(.*)$
RewriteRule ^ /%1 [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteRule ^ / [L,R]