2016-03-18 20 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