2017-01-02 28 views
1

如果擴展名的URL存在於服務器上,則它們可以正確解析,但是如果它們不存在,那麼它們應該是404,這是404的URL會得到一個斜線。有什麼方法可以防止這些404'URL上的尾部斜線?如何防止以.htaccess中的擴展名結尾的404ing URL上的斜線?

下面是我的WordPress安裝的根目錄下的.htaccess文件。

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301] 
# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
# END WordPress 

# BEGIN MainWP 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^wp-content/plugins/mainwp-child/(.*)$ /wp-content/plugins/THIS_PLUGIN_DOES_NOT_EXIST [QSA,L] 
</IfModule> 
# END MainWP 
Options -MultiViews 

回答

1

爲了防止斜線被添加到在擴展名結尾那麼它看起來網址,一樣可以添加另一條件(即RewriteCond指令)從具有添加一個斜槓排除這些文件和重定向。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301] 

因此,爲了防止在.html.php最後被處理的URL:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !.+\.(html|php)$ 
RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301] 

請注意,您將需要清除任何中間緩存,如前面的301將已經被緩存瀏覽器。

爲了處理任何擴展(2首4個字符之間說了),那麼你也許可以這樣做:

RewriteCond %{REQUEST_URI} !.+\.[a-z]{2,4}$ 
+0

沒有骰子。嘗試了第一個和第二個,在我的.htaccess文件的最後。 – Mattypants

+0

@Mattypants對不起,正則表達式應該_negated_!即。正則表達式應該有一個'!'前綴。我已經更新了我的答案。 – MrWhite

+0

...並確保在進行此更改後清除瀏覽器緩存。 – MrWhite

相關問題