.htaccess Htaccess非www和strip index.php
我的.htaccess重定向有问题 我想要一种(非www)domain.tld被重定向到www.domain.tld的情况。我想重写参数以跳过index.php,请求/foo转到index.php/foo 初始情况 首先我有这些规则.htaccess Htaccess非www和strip index.php,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我的.htaccess重定向有问题 我想要一种(非www)domain.tld被重定向到www.domain.tld的情况。我想重写参数以跳过index.php,请求/foo转到index.php/foo 初始情况 首先我有这些规则 RewriteCond %{HTTP_HOST} ^domain\.tld [NC] RewriteRule ^(.*)$ http://www.domain.tld/$1 [R=301] RewriteCond %{REQUEST_FILENAME} !-f R
RewriteCond %{HTTP_HOST} ^domain\.tld [NC]
RewriteRule ^(.*)$ http://www.domain.tld/$1 [R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_\ /:-]*)$ index.php [L]
这起作用了。主要地不起作用的是,在PHP$\u服务器中,['PATH\u INFO']保持为空,我不喜欢字符的白名单
更改路径信息并接受更多信息
所以我把最后一行改成:
RewriteRule ^(.*)$ index.php/$1 [L]
这修复了路径信息和有限的字符。然而,我最近注意到,这导致了非www重定向到www.的失败。。当进入非www域时,Apache说
Moved Permanently
The document has moved here.
其中“here”链接到我键入的相同内容(非www-domain.tld),因此无法为用户提供服务
继续搜索。。
我在这里和其他地方发现了很多问答或者非www重定向的话题,但似乎都以某种方式失败了。例如:
RewriteCond %{HTTP_HOST} !^www.*$ [NC]
RewriteRule ^/.+www\/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301]
这没什么用。没有任何东西被重定向,尽管该网站是在非www上提供的
有人知道我做错了什么,或者有解决这场混乱的办法吗?:)
(最好是,我希望非www重定向是全局的。这样我就不必每次都更改实际的域名。)我猜您只是缺少L标志来结束重写过程:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
并确保将此规则放在那些只会导致内部重写的规则前面。谢谢,这确实是问题所在。我认为L标志标志着处理.htaccess的结束,因此根本不会使用更多的行。但这更像是“先重写,然后继续”。