2016-06-27 1 views
0

У меня есть правила перезаписи ниже в моем .htaccess файл в корневом каталоге:.htaccess: Redirect слешей

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=data1 и product=data2.

Проблема заключается в том, что приведенные ниже ссылки не работают:

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

Но эти адреса работают:

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

Как я могу перенаправить первые два адреса на второй?

И/ИЛИ

ли что-то, что все URL-адреса будут перенаправлять на не-лидирующий слэш один. Таким образом, URL-адреса ниже:

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

являются перенаправлять на них:

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

ответ

2

Чтобы избежать слешей ALLtogether, сделать редирект

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

Чтобы соответствовать URL только с одним элемент, вы можете использовать второе правило

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

или

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

Спасибо за ответ. Первый работает, но я не мог заставить второго работать. Не могли бы вы предоставить полный контент .htaccess, который правильно перенаправляет это перенаправление? Поэтому у меня не будет повторяющегося содержимого, и оба URL-адреса будут перенаправлены на не-трейлинг-косую черту. – Natasha

+1

Если вы хотите избежать дублирования контента, вы должны сначала сделать перенаправление. Но тогда вам больше не понадобится конечная дополнительная слэш. См. Переработанный ответ. –

+0

Спасибо за описание и ответ. – Natasha