mod_rewrite help - конвертирует подкаталоги в переменные GET - PullRequest
0 голосов
/ 14 марта 2012

У меня есть приложение, которое находится в http://mysite.com/myapp. Я хочу поместить файл htaccess в папку / myapp так, чтобы все дополнительные подкаталоги были преобразованы в переменную GET. Э.Г.

http://mysite.com/myapp => /myapp/index.php   # this is happening)
http://mysite.com/myapp/foo => index.php?sub=foo
http://mysite.com/myapp/bar/ => index.php?sub=bar/
http://mysite.com/myapp/foo/bar?baz=bop => index.php?sub=foo/bar&baz=bop

Это не работает:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(/.*)\?(.*) ./index.php?sub=$1&$2 [NC]

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Ваше правило перезаписи не имеет смысла, так как RewriteRule не работает напрямую со строкой запроса (значит - это не часть URL) - оно работает только с частью пути URL (например, в /foo/bar?baz=bop pathчасть будет /foo/bar).Чтобы соответствовать строке запроса, вы должны использовать RewriteCond.

. В вашем случае вам не нужно даже этого делать ... поскольку вы не "полностью модифицируете / изменяете" существующий запросстрока .. просто добавив немного к нему.

Попробуйте этот код:

Options +FollowSymlinks
RewriteEngine On

RewriteRule ^(?!index\.php)(.*)$ index.php?sub=$1 [QSA,L]

1.QSA говорит mod_rewrite добавить текущую строку запроса к новой.

2.Это правило исключает запросы к файлу index.php для предотвращения бесконечного цикла перенаправления.

EDIT:

3.Это правило (а также ваша собственная попытка) перезапишет запросы на любой URL, включая любые существующие файлы (например, изображения, CSS и т. Д.).Чтобы обойти это «ограничение» (я написал это на вашем примере), добавьте эти строки непосредственно перед строкой RewriteRule:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
0 голосов
/ 14 марта 2012

Конечно, это не так. Так же, как в документах написано , вы не можете перехватить строку запроса в RewriteRule.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(/.*)$ ./index.php?sub=$1 [NC,QSA]
...