Я пытаюсь перенаправить страницы с помощью mod_rewrite на страницы с некоторыми переменными (для их использования с PHP $_GET
).
Чтобы привести пример с несколькими строками:
/c/stg
он перенаправляется на item_show.php?id=$1&f=1
(где f
– номер страницы). /c/stg/2
он перенаправляется на вторую страницу с помощью show.php?id=$1&f=$2
. Я думаю, что в моем файле нет ошибок или злоупотреблений, но вот что я хочу:
Я хочу, чтобы пользователь item_show.php?id=$1&f=1
/
string
напрямую, чтобы идти item_show.php?id=$1&f=1
с $1
это наша строка, конечно …
Но когда я изменяю свой файл, удаляя /c/
part из 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]
Я ошибаюсь, если 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]
Ура,
Директивы RewriteCond
относятся только к первой следующей директиве RewriteRule
. Так что в вашем случае два RewriteCond
directcitves применяются только к первой директиве RewriteRule
а не к другим.
Но вы можете использовать это правило абортов, чтобы выйти из процесса перезаписи, если запрос может быть сопоставлен с существующим файлом или каталогом:
RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L]
Это приведет к тому, что следующие правила будут проверяться только в том случае, если запрос не может быть сопоставлен непосредственно с существующим файлом или каталогом.