如何解决htaccess重写网址从https://www.test.com/demo到https://www.test.com/test/demo
我想从https://www.test.com/demo重定向到https://www.test.com/test/demo(在浏览器URL中不可见)
如果我使用此规则,可以,但在浏览器网址中可见:
RewriteCond %{HTTP_HOST} "^www.test.com$"
RewriteCond %{REQUEST_URI} "!^/test"
RewriteRule "^(.*)$" "https://www.test.com/test/$1" [L]
如果我对KO做相同的操作,并且内部apache错误为“请求超出了10个内部重定向的限制”:
RewriteCond %{HTTP_HOST} "^www.test.com$"
RewriteCond %{REQUEST_URI} "!^/test"
RewriteRule "^(.*)$" "/test/$1" [L]
所有重写规则:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Specifique
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteCond %{REQUEST_URI} !^/test/
RewriteRule ^/?(.*)$ /test/$1 [END]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
解决方法
第二次尝试是有道理的,但您的条件将永远不匹配。 看看这个吧:
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteCond %{REQUEST_URI} !^/test/
RewriteRule ^/?(.*)$ /test/$1 [END]
或更简单:
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteCond %{REQUEST_URI} !^/test/
RewriteRule ^ /test%{REQUEST_URI} [END]
如果使用上述规则收到内部服务器错误(http状态500),则很可能是您运行了非常旧版本的apache http服务器。在这种情况下,您将在http服务器错误日志文件中看到对不支持的[END]
标志的明确提示。您可以尝试升级,也可以使用较旧的[L]
标志,尽管在某种程度上取决于您的设置,但是在这种情况下它可能会起作用。
此实现将在http服务器主机配置或分布式配置文件(“ .htaccess”文件)中同样起作用。显然,重写模块需要加载到http serv内部,并有一个一般性说明:您应该始终喜欢将此类规则放置在http服务器主机配置中,而不是使用分布式配置文件(“ .htaccess”)。这些分布式配置文件增加了复杂性,通常是导致意外行为,难以调试的原因,并且确实降低了http服务器的速度。仅当您无法访问真正的http服务器主机配置(阅读:真正便宜的服务提供商)或坚持编写自己的规则的应用程序(这显然是安全的噩梦)时,才提供它们作为最后的选择。并在http主机中启用。如果您使用分布式配置文件,则需要注意在主机配置中完全启用了它的解释功能,并且该文件位于主机的DOCUMENT_ROOT
文件夹中。
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Specifique
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteCond %{REQUEST_URI} !^/test/
RewriteRule ^/?(.*)$ /test/$1 [END]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。