.htaccess-删除路径中第三个斜杠后的所有内容

时间:2019-05-30 20:48:43

标签: apache .htaccess mod-rewrite

在我的网站上,我的URL路径中仅使用3个斜杠:

https://example.com/this/isatest/

现在,我使用.htaccess,这使得(有可能)在URL上添加任意数量的内容(作为副作用)

https://example.com/this/isatest/hipperdihopperdus/pizza/bacon/with/cheese

我想自动删除“ isatest”之后的所有内容,同时使用.htaccess保留斜杠。

这是我的.htaccess当前的样子:

Options -Indexes
Options +FollowSymLinks
RewriteEngine on

# 301 Redirect all requests that don't contain a dot or trailing slash to
# include a trailing slash
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.
RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]

RewriteCond %{THE_REQUEST} /index\.html [NC]
RewriteRule ^index\.html$ /? [R=301,L,NC]

RewriteRule ^listen/$ /console/ [NC,L]

# Rewrites urls in the form of /parent/child/
# but only rewrites if the requested URL is not a file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [L,QSA]

我该如何实现?

2 个答案:

答案 0 :(得分:1)

作为第一条规则,在RewriteEngine指令之后,您可以执行以下操作:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+/[^/]+/). /$1 [R=302,L]

这将检查两个路径段和一个斜杠之后是否还有其他内容(点),并重定向到已删除的“其他内容”。

请注意,这是302(临时)重定向。一旦确定重定向正常,请仅将其更改为301(永久)重定向。这是为了避免浏览器在测试时缓存错误的重定向。

更新:避免重定向以可识别的文件扩展名结尾的文件可能会更有效。或者也许排除您的静态资源的已知目录位置。例如:

RewriteCond %{REQUEST_URI} !\.(css|js|jpg|png|gif)$ [NC]
RewriteRule ^([^/]+/[^/]+/). /$1 [R=302,L]

OR

RewriteCond %{REQUEST_URI} !^/static-resources/
RewriteRule ^([^/]+/[^/]+/). /$1 [R=302,L]

答案 1 :(得分:1)

您可以在<{> {1}}行以下添加该规则

RewriteEngine On