htaccess 隐藏子目录而不更改基本根目录,但另一个子目录除外
htaccess to hide subdirectory without changing base root, and with exception of another subdirectory
我有一个网站https://example.com
其中有 2 个子目录,https://example.com/admin
和 https://example.com/store
。
- 我想从 URL 隐藏
/store
所以我的请求看起来像:
https://example.com/shop.php?id=someid
- 而且,我希望
https://example.com/admin/index.php
能正常工作。
- 我找到了一些同时实现 1 和 2 的答案,但它们改变了基根,所以我所有的 css、js、图像都不会加载
到目前为止我有:
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$
RewriteRule ^store/(.*) / [L,R=301]
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$
RewriteRule !^store/ store%{REQUEST_URI} [L]
这实现了 1 而不是 2。
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$
RewriteRule ^store/(.*) / [L,R=301]
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$
RewriteRule !^store/ store%{REQUEST_URI} [L]
在第二条规则中...排除 RewriteRule
模式 中的 /admin
子目录(以及 /store
)。并添加 条件 以排除包含文件扩展名的请求(即 .css
、.js
、.png
等)。例如:
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$
RewriteCond %{REQUEST_URI} !\.\w{2,4}$
RewriteRule !^(store|admin)($|/) store%{REQUEST_URI} [L]
或者(虽然效率稍低),排除任何已经映射到物理文件的请求:
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^(store|admin)($|/) store%{REQUEST_URI} [L]
此规则假定您在 /store
子目录中还有另一个 .htaccess
文件,该文件也使用重写引擎。 (但如果是这种情况,那么第一条规则实际上没有做任何事情。)
除非您托管多个 domains/sites,否则您不需要第一个条件来检查所请求的 Host
。
我有一个网站https://example.com
其中有 2 个子目录,https://example.com/admin
和 https://example.com/store
。
- 我想从 URL 隐藏
/store
所以我的请求看起来像:https://example.com/shop.php?id=someid
- 而且,我希望
https://example.com/admin/index.php
能正常工作。 - 我找到了一些同时实现 1 和 2 的答案,但它们改变了基根,所以我所有的 css、js、图像都不会加载
到目前为止我有:
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$
RewriteRule ^store/(.*) / [L,R=301]
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$
RewriteRule !^store/ store%{REQUEST_URI} [L]
这实现了 1 而不是 2。
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ RewriteRule ^store/(.*) / [L,R=301] RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ RewriteRule !^store/ store%{REQUEST_URI} [L]
在第二条规则中...排除 RewriteRule
模式 中的 /admin
子目录(以及 /store
)。并添加 条件 以排除包含文件扩展名的请求(即 .css
、.js
、.png
等)。例如:
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$
RewriteCond %{REQUEST_URI} !\.\w{2,4}$
RewriteRule !^(store|admin)($|/) store%{REQUEST_URI} [L]
或者(虽然效率稍低),排除任何已经映射到物理文件的请求:
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^(store|admin)($|/) store%{REQUEST_URI} [L]
此规则假定您在 /store
子目录中还有另一个 .htaccess
文件,该文件也使用重写引擎。 (但如果是这种情况,那么第一条规则实际上没有做任何事情。)
除非您托管多个 domains/sites,否则您不需要第一个条件来检查所请求的 Host
。