微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.htaccess RewriteRule 提供正确的链接,但也提供 404

如何解决.htaccess RewriteRule 提供正确的链接,但也提供 404

我正在托管不同的网站

http://example.nl/example.nl/_sites/byos/
http://example.nl/example.nl/_sites/eggbot/
http://example.nl/example.nl/_sites/hslab/
http://example.nl/example.nl/_sites/prolactin/

是的,有一个与域同名的文件夹,这是有原因的。

我希望链接变成:

http://example.nl/byos/
http://example.nl/eggbot/
http://example.nl/hslab/
http://example.nl/prolactin/

这是众多尝试之一:

RewriteEngine On 
Options +FollowSymlinks 
RewriteCond %{REQUEST_URI} !(.*)example.nl/_sites
RewriteRule ^(.*)$ example.nl/_sites/$1 [L]

还有这个:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteRule ^example.nl/_sites/(.*)$ /$1 [L,NC,R]

最后一个让我接近,它改变了我想要的地址,但它现在也导致 404。 我也尝试过重命名example.nl文件夹,因此它与域名不同,但问题似乎相同。

如果对以后很重要,我这里也有包含文件文件夹:

http://example.nl/example.nl/_misc/
http://example.nl/example.nl/_plugins/

但我不在乎这些是否被重命名,因为它们不会出现在 url 栏中,除非用户直接转到这些文件之一,但我不在乎。

那么我怎样才能省略 example.nl/_sites/ 部分而仍然让网站正常工作?

我在 SO 上看到过类似的问题,但对我来说,它看起来像另一种方言的中文

---- 编辑: 使用 anubhava 的以下答案:

RewriteCond %{HTTP_HOST}::%{THE_REQUEST} ^(?:www\.)?([^:]+)::GET\s/+\1/_sites/(\S*)\s [NC]
RewriteRule ^ /%2 [R=301,NE,L]

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^[^/]+/?$ %1/_sites%{REQUEST_URI} [L]

我不再收到 404。 但是这个文件例如:

http://hslab.nl/hslab.nl/_misc/bna.js

它尝试将其加载为:

http://hslab.nl/_misc/bna.js

哪个失败了。在代码中,它被定位为:

src="../../_misc/bna.js"

如果有帮助,这里是 文件 hslab.nl 的屏幕截图:

enter image description here

解决方法

根据您展示的样品,您可以尝试以下操作吗?公平的警告我已经在移动设备上写了这个,所以还没有测试它应该可以工作恕我直言也会在某个时候测试它。此外,由于您提到可能有多个域,所以我特意在此处添加了一个条件来检查它是否是 example.nl,以防您想重写对任何域的请求,那么我们也可以省略该条件。

RewriteEngine ON
RewriteCond %{HTTP_HOST} ^example\.nl$ [NC]
RewriteRule ^([a-zA-Z]+)/?$ %{HTTP_HOST}/_sites/$1 [L]

注意:如果您的目录/文件夹不一定以字母开头并且可以是任何内容,则将上面的正则表达式从 ^([a-zA-Z]+)/?$ 更改为 ^([.*])/?$

,

无需硬编码主机名,您可以在站点根目录 .htaccess 中尝试以下规则:

RewriteCond %{HTTP_HOST}::%{THE_REQUEST} ^(?:www\.)?([^:]+)::GET\s/+\1/_sites/(\S*)\s [NC]
RewriteRule ^ /%2 [R=301,NE,L]

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^[^/]+/?$ %1/_sites%{REQUEST_URI} [L]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。