0

这段代码真的让我很困惑为什么会这样。如果我添加 [R=302,L] 那么我的链接可以完美地工作,就像我希望的那样。但是如果我不添加它并且我只有 [L] 它会进入错误页面。R和no 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]
4

1 回答 1

0

通过传递R=***标志,您将强制浏览器在新 URL 上实际向服务器发出新请求。在随后的请求中,由于主机名已经是您想要的,这显然会在下一个请求中跳过此条件并继续其余的 htaccess 逻辑。

如果您删除它并只留下L标志。您指出这是您应该处理的 htaccess 中的最后一条规则,因此文件中的以下规则将永远不会被执行(我猜这会导致您出现错误页面)。

于 2013-05-03T20:46:30.490 回答