htaccess重写的神秘异常

时间:2015-09-03 09:10:51

标签: .htaccess

我的htaccess文件只包含几行,首先删除www然后将“.php”添加到slug中以获取正确的php文件,所以

www.kalicup.fr/seo 

应重写为

kalicup.fr/seo

然后显示文件seo.php(网址本身没有显示.php扩展名)

目前

kalicup.fr/seo 

正确显示seo.php而不显示文件扩展名。 但是,当我尝试

www.kalicup.fr/seo 

重写为

kalicup.fr/seo.php

在网址

中添加.php扩展名

所以我的htaccess中显然存在问题,但我看不到它! 这是我的代码

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

ErrorDocument 404 /404.php

# redirect the url with www to url without
RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?kalicup\.fr)$ [NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?kalicup\.co\.uk)$ [NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]

# add .php to urls
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

任何人都可以看到问题吗?

1 个答案:

答案 0 :(得分:1)

.htaccess

中使用它
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

ErrorDocument 404 /404.php

# redirect the url with www to url without
RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?kalicup\.(?:fr|co\.uk))$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

# add .php to urls
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

只有一个.fr和.co.uk的测试。

和-MultiViews:http://httpd.apache.org/docs/2.2/en/mod/core.html#options

MultiViews的效果如下:如果服务器收到/ some / dir / foo的请求,如果/ some / dir启用了MultiViews,并且/ some / dir / foo不存在,那么服务器会读取目录查找名为foo。*的文件,并有效地伪造一个命名所有这些文件的类型映射,为它们分配相同的媒体类型和内容编码,如果客户端通过名称请求其中一个文件。然后,它会根据客户的要求选择最佳匹配。 http://httpd.apache.org/docs/2.2/en/content-negotiation.html