我意识到有类似的问题,但情况并不相同。我正在寻找一种方法来删除不再存在的URL的最后一部分,但是从一些外部源链接,以减少高CPU使用率。网址看起来像这样:
http://example.com/2018/12/05/article-name/removethis
删除哪些是需要删除的内容以避免404错误。我已经看到了将url的一部分更改为另一个的答案,而不是如何简单地从url的末尾删除特定的字符串。
我也正在阅读htaccess文档,但它非常广泛,我还没有能够想出一种方法来改变其他示例中的重写命令来做我需要的。
感谢您的时间。
答案 0 :(得分:0)
我认为在这种情况下,您应该指定在出现错误时需要的内容,并且从一个到另一个指定各种内容,然后根据需要使用特定代码来处理它。例如,以下代码将逐级处理错误请求,但当然它被限制为/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]
因此,如果http://example.com/2018/12/05/article-name/removethis
目录存在,请求http://example.com/2018/12/05/article-name/
将为article-name/
,否则如果http://example.com/2018/12/05/
目录存在则将转到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]