【发布时间】:2021-01-25 16:34:55
【问题描述】:
我正在托管不同的网站
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:
【问题讨论】:
标签: apache .htaccess redirect mod-rewrite url-rewriting