从地址栏隐藏文件夹名称,但只有 1 个内部 css 页面 link 不起作用

Hide folder name from address bar but only 1 internal css page link not work

我想通过 .htaccess 隐藏地址栏中的文件夹名称,这意味着隐藏我的文件夹名称:http://www.myweb.com/myfolder/mypage 但只有 1 个内部 css 页面 link 不起作用。

我使用了从 stockoverflow 收集的以下代码,它很好地隐藏了文件夹名称,但内部页面 link 不起作用。

这里其他 css 和 js link 也工作得很好。

Information: I have 2 css folder. One is root directory and others one is myfolder directory.

内页link:

All css and js page link like as

<link href="css/style.css" rel="stylesheet" type="text/css" />

Try 1:

<link href="../myfolder/css/style.css" rel="stylesheet" type="text/css" />

Also try 2:

<link href="http://www.myweb.com/myfolder/css/style.css" rel="stylesheet" type="text/css" />

我的 htaccess

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) \.php [L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+myfolder/([^\s]+) [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?!^myfolder/)^(.*)$ /myfolder/ [L,NC]

问题在于,如果请求路径尚不存在,则以下规则仅将请求传递给 /myfolder 内的文件。但是,由于 /css/style.css 也存在于根目录中,因此测试失败并抢占规则。

RewriteCond %{REQUEST_FILENAME} !-f # if not a file
RewriteRule (?!^myfolder/)^(.*)$ /myfolder/ [L,NC]

解决此问题的最简单方法是重命名 myfolder 目录中的文件夹或 css 文件。另一种方法是附加一个查询字符串标记,如

<link href="css/style.css?myfolder" rel="stylesheet" type="text/css" />

并在 .htaccess 中检查它,例如

RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{QUERY_STRING} ^myfolder$ [NC]
RewriteRule (?!^myfolder/)^(.*)$ /myfolder/ [L,NC]