如何解决.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
的屏幕截图:
解决方法
根据您展示的样品,您可以尝试以下操作吗?公平的警告我已经在移动设备上写了这个,所以还没有测试它应该可以工作恕我直言也会在某个时候测试它。此外,由于您提到可能有多个域,所以我特意在此处添加了一个条件来检查它是否是 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 举报,一经查实,本站将立刻删除。