Мод переписать и PHP - PullRequest
       13

Мод переписать и PHP

1 голос
/ 25 апреля 2009

Я пытаюсь перенаправить страницы с помощью mod_rewrite на страницы с некоторыми переменными (для использования их с PHP $_GET).

Чтобы привести пример с несколькими строками:

  • Когда пользователь вводит /c/stg, он перенаправляет на item_show.php?id=$1&f=1 (где f - номер страницы).
  • Когда пользователь вводит /c/stg/2, он перенаправляет на вторую страницу с помощью show.php?id=$1&f=$2.

Я думаю, что в моем файле нет ошибок или их неправильного использования, но вот что я хочу:

Я хочу, чтобы пользователь ввел /string, чтобы сразу перейти item_show.php?id=$1&f=1 с $1, это наша строка , конечно ...

Но когда я изменяю свой файл, удаляя часть /c/ из RewriteRule, он начинает выдавать ошибки во всех других каталогах и не читает никаких файлов (my.css), даже если я уже определил RewriteCond %{REQUEST_FILENAME} !-f ...

У вас есть предложения? Или как я могу сделать эту систему возможной любым способом?

Options FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#user
RewriteRule ^u/([^/]+)/?$ profile.php?username=$1 [L,NC]

#marked
RewriteRule ^marked/([^/]+)/?$ item_marked.php?id=$1 [L,NC]

#content
RewriteRule ^c/([^/]+)/?$ item_show.php?id=$1&f=1 [L,NC]
RewriteRule ^c/([^/]+)/([^/]+)/?$ item_show.php?id=$1&f=$2 [L,NC]

Ответы [ 2 ]

1 голос
/ 26 апреля 2009

Я ошибаюсь, если RewriteCond передается только первому RewriteRule ??

Попробуйте вместо этого:

Options FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#user
RewriteRule ^u/([^/]+)/?$ profile.php?username=$1 [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#marked
RewriteRule ^marked/([^/]+)/?$ item_marked.php?id=$1 [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#content
RewriteRule ^c/([^/]+)/?$ item_show.php?id=$1&f=1 [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ item_show.php?id=$1&f=$2 [L,NC]

Приветствия

1 голос
/ 25 апреля 2009
Директивы

RewriteCond относятся только к первой следующей директиве RewriteRule. Таким образом, в вашем случае две директивы RewriteCond применяются только к первой директиве RewriteRule, а не к другим.

Но вы можете использовать это правило прерывания, чтобы выйти из процесса перезаписи, если запрос может быть сопоставлен с существующим файлом или каталогом:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

Это может привести к тому, что следующие правила будут проверены, только если запрос не может быть сопоставлен напрямую с существующим файлом или каталогом.

...