2016-06-27 11 views
0

私は、ルートディレクトリにある私の.htaccessファイルに以下の書き換えルールを持っている:.htaccessファイル:リダイレクト最後のスラッシュ

RewriteEngine On 

# Exclude .css/.js/... 
RewriteCond ${REQUEST_URI} ^.+$ 
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml)$ [OR] 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -l 
RewriteRule^- [L] 

# Rewrite Rule 
RewriteRule ^([^/]*)/([^/]*)$ /index.php?category=$1&product=$2 

だから、URL http://example.com/data1/data2が私にcategory=data1product=data2を与えます。

問題は、以下のURLが機能していないということです。

http://example.com/data1   # Not Working (Page Not Found) 
http://example.com/data1/data2/ # Not Working (Page Not Found) 

しかし、これらのURLが機能している:

http://example.com/data1/   # Works -> category=data1 
http://example.com/data1/data2 # Works -> category=data1 & product=data2 

どのように私は二番目に最初の2つのURLにリダイレクトことができますか?

OR/AND

すべてのURLが非末尾のスラッシュ1にリダイレクトされている何かをします。そこで、以下のURL:

http://example.com/data1/ 
http://example.com/data1/data2/ 

はこれらにリダイレクトされます。

http://example.com/data1 
http://example.com/data1/data2 

答えて

2

末尾がalltogetherスラッシュ回避するために、一つだけでURLを一致させるには、リダイレクト

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)/$ /$1 [R,L] 

を行います要素の場合は、2番目の規則を使用することがあります。

すべて一緒に置く

または

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ /index.php?category=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)/$ /$1 [R,L] 

RewriteRule ^(.+?)/(.+)$ /index.php?category=$1&product=$2 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ /index.php?category=$1 [L] 
+0

を与える答えをいただき、ありがとうございます。最初のものは動作しますが、私は2番目のものを動作させることができませんでした。それらのリダイレクトを正しく行う完全な.htaccessコンテンツを提供してください。だから、私は重複したコンテンツを持たず、両方のURLは非末尾のスラッシュ1にリダイレクトされます。 – Natasha

+1

重複するコンテンツを避けたい場合は、まずリダイレクトを行う必要があります。しかし、その後、後続のオプションのスラッシュは必要ありません。リワークされた回答を参照してください。 –

+0

あなたの説明と答えをありがとう。 – Natasha

関連する問題