.htaccess仅在root上显示子文件夹内容,但不在地址栏

时间:2016-10-16 23:11:06

标签: php wordpress .htaccess redirect mod-rewrite

这是我目前在.htaccess文件中的内容

RewriteEngine On
RewriteRule ^$ /subfolder/ [R=301,L]

这只是重定向到子文件夹,但我还想阻止在浏览器的地址栏中显示子文件夹,我只希望在root(主域页)上发生这种情况,并且所有其他文件请求应该正常,没有任何重定向。

我已经在SO上尝试了很多解决方案,但是他们都不做任何事情,只需重定向到子文件夹,或重定向所有内容,包括我的样式表,并删除所有样式和网站上的所有内容。

重写规则是否可能无法在localhost上运行?重定向确实有效,但我开始怀疑apache可能没有正确设置其他东西(抱歉我的无知,我不太了解apache和重定向)。

编辑:更多细节:这是一个PHP(WordPress)安装,这是root是我想重定向的唯一页面,但是所有其他文件(即CSS样式)调用构建此页面的JS脚本等应该从根目录调用,而不是从子文件夹调用。此外,所有进一步导航到网站上的其他页面应该正常工作,而不会影响我正在设置的.htaccess指令。

2 个答案:

答案 0 :(得分:3)

假设subfolder没有其他.htaccess,您可以在站点根目录中使用此代码.htaccess:

DirectoryIndex index.php
RewriteEngine On

# externally redirect /subfolder/anything to /anything
RewriteCond %{THE_REQUEST} \s/+subfolder/(\S*) [NC]
RewriteRule ^ /%1 [R=301,NE,L]

RewriteRule ^(index\.php)?$ subfolder/index.php [NC,L]

# internally forward /anything to /subfolder/anything
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?!subfolder/).+$ subfolder/$0 [NC,L]

# rest of the Wordpress rules go here

参考文献:

答案 1 :(得分:1)

如果您尝试过的某些重定向确实发生了,那么您的.htaccess正在运行。

R=301是重定向的内容,更改了地址栏中的网址。删除它并重写"重写"将执行,执行目标页面而不更改浏览器中的URL。

仅重写基础uri'':

Options -Indexes
RewriteEngine On
RewriteRule ^/?$ /event/index.php [L]