2016-03-18 23 views
2

我有一个htaccess的,看起来像这样mod_rewrite并没有完全工作

<IfModule mod_rewrite.c> 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{QUERY_STRING} ^page=([^&]+) [NC,OR] 
RewriteCond %{QUERY_STRING} &page=([^&]+) [NC] 
RewriteRule ^index\.php$ /%1? [R,NC,L] 
</IfModule> 

我已经把两个不同服务器上这个文件。在服务器1上的 ,它工作得很好。我的意思是重定向/index.php?page=asd为/ asd .. 在第二台服务器上,它不会重定向到/ asd。 在第二个服务器,我现在有这个文件,

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?page=$1 [QSA] 

的第一台服务器只是为了测试htaccess文件。 第二台服务器是现场服务器。我正在运行wordpress,我希望index.php?page = asd链接消失,重定向到/ asd,但仍然映射到index.php?page = asd。

我该怎么做?

根据要求,第二个服务器

# Attempt to override some php settings, these settings may be helpful on some hosts if your 
# default configuration does not meet CMS's minimum requirements, and your host 
# has given your account appropriate permissions 
php_value upload_max_filesize "10M" 
php_value session_save_path "tmp/cache" 

#php_flag magic_quotes_gpc Off 
#php_flag register_globals Off 
#php_flag session.use_trans_sid Off 

# (this is important, so uncomment if your host permit) 
Options -Indexes 
ServerSignature Off 

Options +FollowSymLinks 

# To prevent E_STRICT problems with PHP 5.3+ you can uncomment the following lines 
# Note: These settings should only be enabled for production sites! 
#php_flag display_startup_errors 0 
#php_flag display_errors 0 
#php_flag html_errors 0 
#php_value docref_root 0 
#php_value docref_ext 0 

<IfModule mod_rewrite.c> 
RewriteEngine on 
# 
#Sub-dir e.g: /cmsms 
#RewriteBase/

# 301 Redirect all requests that don't contain a dot or trailing slash to 
# include a trailing slash 
# but ignore POST requests. 
#RewriteCond %{REQUEST_URI} !/$ 
#RewriteCond %{REQUEST_URI} !\. 
#RewriteCond %{REQUEST_METHOD} !POST$ 
#RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L] 
# Rewrites urls in the form of /parent/child/ 
# but only rewrites if the requested URL is not a file or directory 
# 


RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?page=$1 [QSA] 

#RewriteRule ^(.*)$ /$1 [R=301,L] 

#RewriteRule ^index\.php/(.*)$ /$1 [R,NC,L] 

#RewriteCond %{QUERY_STRING} ^page=([^&]+) [NC,OR] 
#RewriteCond %{QUERY_STRING} &page=([^&]+) [NC] 
#RewriteRule ^index\.php$ /%1? [R,NC,L] 
</IfModule> 

<IfModule mod_rewrite.c> 

</IfModule> 

<IfModule mod_header.c> 
# Disable ETags 
Header unset ETag 
FileEtag None 
</IfModule> 

<IfModule mod_deflate.c> 
# Compress css, plaintext, xml, gif, and images in transport. 
AddOutputFilterByType DEFLATE text/css text/plain text/xml image/gif image/jpeg image/png 
</IfModule> 

<IfModule mod_expires.c> 
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> 
# Set expires tags on various files... so that the browser wont attempt to reload them. 
ExpiresActive On 
ExpiresDefault "access plus 1 year" 
<IfModule mod_header.c> 
    # Setting cache control to public allowes proxy servers to cache the items too. 
    Header set Cache-Control "public" 
</IfModule> 
</FilesMatch> 
</IfModule> 

# compress text, html, javascript, css, xml: 
AddOutputFilterByType DEFLATE text/plain 
AddOutputFilterByType DEFLATE text/html 
AddOutputFilterByType DEFLATE text/xml 
AddOutputFilterByType DEFLATE text/css 
AddOutputFilterByType DEFLATE application/xml 
AddOutputFilterByType DEFLATE application/xhtml+xml 
AddOutputFilterByType DEFLATE application/rss+xml 
AddOutputFilterByType DEFLATE application/javascript 
AddOutputFilterByType DEFLATE application/x-javascript 

# Or, compress certain file types by extension: 
<files *.html> 
SetOutputFilter DEFLATE 
</files> 

<IfModule mod_headers.c> 
# WEEK 
<FilesMatch "\.(jpg|jpeg|png|gif|swf|woff)$"> 
    Header set Cache-Control "max-age=604800, public" 
</FilesMatch> 
</IfModule> 
+1

如果这是WP可能有更多的规则。您可以显示您的完整.htaccess – anubhava

+0

我更新了我的原始文章 – John

回答

1

更改所有的重写规则与此代码块我完全htaccess文件:

RewriteEngine On 

# redirects /index.php?page=asfd to /asdf 
RewriteCond %{THE_REQUEST} /index\.php\?page=([^\s&]+) [NC] 
RewriteRule^/%1? [R=302,L,NE] 

# redirects /index.php/asfd to /asdf 
RewriteCond %{THE_REQUEST} /index\.php/([^?\s]+)\s [NC] 
RewriteRule^/%1 [R=302,L,NE] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?page=$1 [QSA,L] 
+1

它正在工作。只是一件我忘记提及的事情。 /index.php/asd也工作..你可以解决这个问题,所以它重定向到/ asd? //编辑:我添加了RewriteRule^index \ .php /(.*)$/$ 1 [R,NC]作为最后一行,它的工作原理。谢谢 – John

+0

当然,检查更新的答案 – anubhava