Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess Htaccess非www和strip index.php_.htaccess_Mod Rewrite - Fatal编程技术网

.htaccess Htaccess非www和strip index.php

.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

我的.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
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的结束,因此根本不会使用更多的行。但这更像是“先重写,然后继续”。