Как вы добавляете вторую возможную переменную к чистому URL? - PullRequest
0 голосов
/ 23 июля 2011

Я создал код перезаписи htaccess для URL, поэтому, когда пользователь переходит на myurl.com/testing/, он показывает их index.php?page=testing, однако я хотел бы иметь вторую или, возможно, третью страницу, чтобы она выглядела как myurl.com/testing/2832/9283 и отображала быпользователи index.php?page=testing&var1=2832&var2=9283.

Это код, который у меня сейчас есть:

RewriteRule ^([^\/]+)/([^\/]*)/$ index.php?page=$1&var1=$2
RewriteRule ^([^\/]+)/([^\/]*)$ index.php?page=$1&var1=$2

Это работает, но я хочу сделать переменные необязательными.Если у меня нет второй переменной (т.е. просто myurl.com/testing/), он говорит, что не может найти файл.

Ответы [ 2 ]

1 голос
/ 23 июля 2011
# 3-level deep parameters
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(/([^/]+))?(/([^/]+))?(/)?$ /index.php?page=$1&var1=$3&var2=$5 [QSA,L]
  1. Это правило не касается уже существующих файлов и папок.

  2. Это правило будет перезаписано:

    • /help/tracking/123456/ => /index.php?page=help&var1=tracking&var2=123456
    • /help/tracking => /index.php?page=help&var1=tracking&var2=
    • /help => /index.php?page=help&var1=&var2=

У вас было page=index.php, потому что ваше правило переписывает уже переписанные URL-адреса (многие забывают, что когда перезапись происходит, она переходит к следующей итерации и начинает тестировать все правила снова ).Это правило имеет условия (дополнительные проверки), чтобы игнорировать уже существующие файлы и папки.

0 голосов
/ 23 июля 2011

Почему бы просто не установить несколько RewriteRules для каждого случая?

RewriteRule ^([^/]+)/?$ index.php?page=$1
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?page=$1&var1=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?page=$1&var1=$2&var2=$3
...