这段代码让我感到困惑的是为什么会这样。如果我添加[R = 302,L] 然后我的链接完全正如我希望的那样。但如果我不添加它,我只有[L] 它会进入错误页面。 R和否R之间的区别不在于浏览器中的地址栏是否更新?
这是代码中的最后一行。我正在尝试做一个内部/无声的mod_rewrite
我想要用户输入http://example.com或http://example.com/home/
我想在内部使用相同的网址http://example.com/home
# Do not remove this line, otherwise mod_rewrite rules will stop working
RewriteBase /
AddHandler application/x-httpd-php .css
AddHandler application/x-httpd-php .js
Options +Multiviews
RewriteEngine On
#NC not case sensitive
#L last rule don't process futher
#R 301 changes the url to what you want
#changes the host to make sure it has no www infront
RewriteCond %{HTTP_HOST} !^example\.host56\.com
RewriteRule ^(.*)$ http://example.host56.com [R=302,L]
#kills request with file extensions
RewriteCond %{THE_REQUEST} \.(php|jsp|html|jsp|asp)/?\ HTTP/
RewriteRule .* - [F]
#selects home
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\ HTTP/1.1$
RewriteRule ^.*$ home/ [L]
答案 0 :(得分:0)
通过传递R=***
标志,您强制浏览器在新URL处实际针对服务器发出新请求。在随后的请求中,由于主机名已经是你想要的,这显然会在下一个请求中跳过这个条件并继续使用其余的htaccess逻辑。
如果删除此选项并仅保留L
标记。您指出这是您应该处理的htaccess中的最新规则,因此文件中的以下规则将永远不会被执行(我猜这会导致错误页面出现)。