[英]How to have Different htaccess redirect based on subdirectory requested?
我试着四处寻找一个解决这个问题的问题,但我不知道确切的措辞,所以我找不到任何有用的东西。
我在我的网站上安装了 Wordpress,按照本指南,我能够将它移动到不同的文件夹,所以我现在在我的主 public_html 目录中有 2 个文件夹。
我正在尝试将一些 p5.js 草图上传到第二个文件夹,以便我可以从 Wordpress 站点引用它们。 当我尝试将它们链接到本指南建议的 iframe 中时,问题就出现了。 我引用src="website.com/projects/project_name/sketch.html"
但不幸的是它被重定向回 wordpress 安装 404 页面。
经过一些搜索,看起来我的主要 .htaccess 文件是问题所在。 我的文件看起来像这样(示例/my_subdir 已更改)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir/index.php [L]
</IfModule>
所以我的问题是,我将如何修改它以保持从“website.com”重定向到 my_subdir/index.php(这是 Wordpress 安装),但添加一个警告,不要重定向 website.com/directory2 请求(这是项目将被存储)
如果您的代码example.com
的 HOST 是您在问题中称为website.com
,并且我假设您的代码已经正常工作,除了directory2
请求。 然后试试这个:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_subdir/
RewriteCond %{REQUEST_URI} !^/directory2/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir/index.php [L]
</IfModule>
已编辑目录 2 只需要更改 1 行
下面是我的测试:
IP:172.18.0.2
根目录:/www/htdocs
目录树(html文件内容):
-- htdocs/
| -- my_subdir/
| | -- index.html (subdir index.html)
| | -- a1.html (subdir a1.html)
|
| -- directory2/
| | -- index.html (dir2 index.html)
| | -- b1.html (dir2 b1.html)
|
| -- index.html (helloworld index.html)
| -- .htaccess
下面是我的.htaccess
文件:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(172.18.0.2)$
RewriteCond %{REQUEST_URI} !^(/my_subdir/) [NC]
RewriteCond %{REQUEST_URI} !^(/directory2/) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir/$1
RewriteCond %{HTTP_HOST} ^(172.18.0.2)$
RewriteRule ^(/)?$ my_subdir/index.html [L]
我的测试:
- 访问主机
[user@client tmp]$ wget 172.18.0.2
Saving to: ‘index.html’
[user@client tmp]$ cat index.html
subdir index.html
请求已到达 my_subdir/index.html
- 访问 172.18.0.2/my_subdir/a1.html
[user@client tmp]$ wget 172.18.0.2/my_subdir/a1.html
Saving to: ‘a1.html’
[user@client tmp]$ cat a1.html
subdir a1.html
请求已到达 my_subdir/a1.html
- 访问 172.18.0.2/a1.html
[user@client tmp]$ wget 172.18.0.2/a1.html
Saving to: ‘a1.html’
[user@client tmp]$ cat a1.html
subdir a1.html
请求已到达 my_subdir/a1.html
- 访问 172.18.0.2/directory2
[user@client tmp]$ wget 172.18.0.2/directory2
...
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://172.18.0.2/directory2/ [following]
...
Saving to: ‘directory2’
[user@client tmp]$ cat directory2
dir2 index.html
请求已到达 directory2/index.html
- 访问 172.18.0.2/directory2/b1.html
[user@client tmp]$ wget 172.18.0.2/directory2/b1.html
Saving to: ‘b1.html’
[user@client tmp]$ cat b1.html
dir2 b1.html
请求已到达 directory2/b1.html
- 访问 172.18.0.2/testerror
[user@client tmp]$ wget 172.18.0.2/testerror
ERROR 404: Not Found.
[user@server log]$ tail error_log
AH00128: File does not exist: /www/htdocs/my_subdir/testerror
请求试图到达 my_subdir/testerror 并且什么也没找到
所以基于这个小测试:
.htaccess
重写规则my_subdir
或directory2
开头的请求子 url 将全部重写为my_subdir
并带有任何后续字符串(测试 3 和 6)my_subdir
请求将访问my_subdir/
下的文件(测试 2)directory2
请求不会被重定向到my_subdir
, my_subdir
会访问directory2
下的索引或文件(测试 4 和 5)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.