2015-02-09 24 views
0

我有一个网站,我需要一个全面的非目录和非文件请求重新回到HTTP_HOST。我有一个重写规则,只能提供无扩展名的PHP文件,并且总是能够解析来自裸域请求的www.HTTP_HOST。这是我的htaccess文件:htaccess规则重定向所有非目录和非文件请求

#Main Page 
DirectoryIndex index.php 
AddDefaultCharset UTF-8 
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

# Cache Control for Images and Assets 
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> 
Header set Cache-Control "max-age=604800, public" 
</FilesMatch> 

# Never Use the naked domain 
RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301,NE] 

# Never Use the naked domain and Remove PHP extension 
RewriteCond %{THE_REQUEST} \.(php|cfm)[\s?] [NC] 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
RewriteRule ^(.+?)\.(cfm|php)$ /$1 [R=301,L,NE] 

# Re-direct Non-file Non-directories to HTTP_HOST 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+?)((\?.*)|())$ http://www.example.com [R=301,L] 

# unless directory, remove trailing slash 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [R=301,L] 

# Resolve .php file for extensionless php urls 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 

我的第四个规则集似乎没有按照我需要的方式工作,不知道为什么。感谢您提前提供任何帮助。

+0

这是'#重新指导非文件...'不工作吗? – anubhava 2015-02-09 17:31:40

+0

它现在似乎在工作。不知道是否旧版本的htaccess文件被缓存或问题是什么。 – 2015-02-09 19:08:28

回答

0

而不是使用mod_rewrite,考虑使用FallbackResource非文件请求的过滤器:

http://httpd.apache.org/docs/trunk/mod/mod_dir.html#fallbackresource

这是更易于维护,而且应该更容易让Apache处理。

+0

该解决方案非常适用于解析已定义的现有文件,而不是返回404。但是,所请求的URL仍然附加到主机,这对SEO不利。重写仍然是需要的。 – 2015-02-09 21:13:55

相关问题