【发布时间】:2017-01-05 14:57:50
【问题描述】:
我有一个域,其中包含一个带有网络应用程序结构的子文件夹。我在我的根域上添加了一个.htaccess 以指向我的子文件夹 Web 应用程序上的公用文件夹。它工作正常,但是当我输入 www.example.com 时,浏览器 URL 会更改为 www.example.com/subfolder/public,但我希望它不会改变。
这是我的.htaccess:
RewriteEngine On
RewriteRule ^.*$ subfolder/public [NC,L]
编辑
第一个 .htaccess 用于重定向子文件夹/公共,其中还有另一个 .htaccess 可以完成所有工作。
这里是位于www.example.com/subfolder/public/ 的第二个.htaccess 的代码:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
【问题讨论】:
-
您当前的指令应该可以正常工作 - 它不应该重定向。确保您已清除浏览器缓存。 (旁白:你也不需要
NC标志) -
是的,我写的很好,但是浏览器上的 url 改变了,我希望重定向请求,而不改变浏览器上的 url
-
如果您看到重定向(即浏览器中的 URL 正在更改),那么 something else 似乎正在执行此操作。单独的上述指令不能做这样的重定向。
.htaccess中还有其他指令吗?文件系统路径上还有其他.htaccess文件吗? (注意“外部重定向”和“内部重写”之间的区别。您的代码显示的是重写,而不是重定向。) -
是的,我有 2 个不同的 .htaccess,我在
domainRoot上发布了一个,然后在subfolder/public上发布了另一个 .htaccess,它重定向到正确的文件并完成所有工作,第一个我仅用于将请求重定向到第二个 -
这就是问题所在。
subfolder/public/.htaccess中的任何 mod_rewrite 指令将完全覆盖(默认情况下)父.htaccess文件中的 mod_rewrite 指令。因此,上述指令甚至没有被处理。添加您的其他.htaccess文件的内容。
标签: apache .htaccess redirect mod-rewrite url-rewriting