2013-03-31 2 views
0

у меня есть текущий URL:правила mod_rewrite для чистой URL-адресов с дополнительными параметрами

http://domain.com 

Когда вы посещаете эту URL его по умолчанию нагрузок

http://domain.com/index.php 

В моей .htaccess у меня есть:

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^([^/]*)$ /index.php?var1=$1 [L] 
RewriteRule ^([^/]*)/([^/]*)$ /index.php?var1=$1&var2=$2 [L] 
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?var1=$1&var2=$2&var3=$3 [L] 
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /index.php?var1=$1&var2=$2&var3=$3&var4=$4 [L] 
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /index.php?var1=$1&var2=$2&var3=$3&var4=$4&var5=$5 [L] 

.htaccess дает 404 для всех страниц, поэтому я уверен, что это неправильно.

Я хочу быть в состоянии иметь все следующие URLS работы

http://domian.com/val1/ 
http://domian.com/val1/val2/ 
http://domian.com/val1/val2/val3 
http://domian.com/val1/val2/val3/val4/ 
http://domian.com/val1/val2/val3/val4/val5 

Значение они необязательные параметры

Что я делаю неправильно? Как настроить .htaccess для принятия необязательных параметров.

EDIT: У меня было много вопросов в исходном вопросе, поэтому я просто превратил его в еще один легко понятный вопрос. Надеюсь, что я получу ответ.

ответ

2

Ну я нашел ответ после того, как совсем немного проб и ошибок:

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)$ index.php?word=$1&media=$2&date=$3&sortby=$4&source=$5 [L] 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)$ index.php?word=$1&media=$2&date=$3&sortby=$4 [L] 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)$ index.php?word=$1&media=$2&date=$3 [L] 
RewriteRule ^([\w-]+)/([\w-]+)$ index.php?word=$1&media=$2 [L] 
RewriteRule ^([\w-]+)$ index.php?word=$1 [L] 

Это заставляет меня результаты, которые я искал. Однако, если есть слэш в конце я получаю пример 404 :

http://domain.com/val1/ 

Дает 404 однако

http://domain.com/val1 

Работы, как и ожидалось. Как так?

EDIT: faa solution for trailing slashes working. Окончательные правила выглядят так:

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?var1=$1&var2=$2&var3=$3&var4=$4&var5=$5 [L] 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?var1=$1&var2=$2&var3=$3&var4=$4 [L] 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?var1=$1&var2=$2&var3=$3 [L] 
RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?var1=$1&var2=$2 [L] 
RewriteRule ^([\w-]+)/?$ index.php?var1=$1 [L] 
+1

Проверьте мой ответ. Причина 'http: // domain.com/val1 /' не работает с вашими правилами, объясняется там и исправляется. Вам нужно добавить необязательную привязку к регулярному выражению. Как этот '/? $'. Это все в моем ответе. –

+0

Ваш ответ дал мне ошибку сервера-интернера. Ваше конечное слэш-решение работало как шарм. Спасибо – Marc

+1

Я думаю, это потому, что правила в вашем исходном вопросе находятся в другом порядке. Я их не тестировал. Просто хотел указать причину ошибки. –

1

В некоторых примерах запросов есть трейлинг-косая черта, которые не соответствуют регулярному выражению в правилах.

Вы можете попробовать это:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteRule ^([^/]+)/?$ /index.php?var1=$1 [L,NC] 
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?var1=$1&var2=$2 [L,NC] 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /index.php?var1=$1&var2=$2&var3=$3 [L,NC] 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?var1=$1&var2=$2&var3=$3&var4=$4 [L,NC] 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?var1=$1&var2=$2&var3=$3&var4=$4&var5=$5 [L,NC] 
+0

Эй, спасибо за ответ. Я опубликовал ответ, который сработал для меня. добавит ли NC исправление новой проблемы Im, имеющей? – Marc

Смежные вопросы