.HTACCESS MOD_REWRITE FLat Ссылки Проблема - PullRequest
0 голосов
/ 20 июня 2011

У меня возникли некоторые проблемы при переписывании плоских ссылок с использованием htaccess, у меня есть два набора правил, которые независимо друг от друга работают идеально, но при их объединении они имеют нежелательный эффект.

В первом разделе добавлен трейлинг впередкосая черта, если она отсутствует, и переписывает URL с переадресацией 301.

Вторая преобразует все «папки» в параметры, которые затем передаются в php в определенном формате.

У нас есть неизвестное количество папок в зависимости от страницы, поэтому мы хотим сохранить общий код.

Проблема в том, что, хотя функциональность кода работает (т.е. php получает правильные параметры),URL переписан в неправильном формате.

Код Php:

<code><?php echo ‘<pre>’;print_r($_GET); echo ‘
';?>

Пример URL: (удален HTTP: // как ограничендве ссылки на вопрос)

localhost/foo/bar 

переписывается в

test.localhost/foo&other[]=bar/ 

с выводом:

Array
(
    [p] => foo
    [other] => Array
        (
            [0] => bar
        )
)

Если вы удалите первый раздел для htaccess, товывод такой же, а URL остается:

localhost/foo/bar

HTACCESS:

Options +FollowSymlinks
RewriteEngine on

РАЗДЕЛ 1:

RewriteCond %{REQUEST_URI} !.*/$
RewriteRule (.*)$ /$1/ [L,R=301] 

РАЗДЕЛ 2:

RewriteRule ^(.*)/([^/]+)/?$ $1&other[]=$2 [L]
RewriteRule ^(?!index\.php)([^/]+)/?$ /index.php?p=$1 [L,QSA]

1 Ответ

0 голосов
/ 21 июня 2011

Вместо этого попробуйте следующие строки:

Options +FollowSymlinks
# Activate Rewrite Engine
RewriteEngine on
# Force trailing slash to be present (only if such file does not exist)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [R=301,QSA]
# Rewrite rule to real php file (only if such folder does not exist)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9\-_]+)/([a-z0-9\-_]+)/$ /index.php?p=$1&other[]=$2 [NC,QSA,L]

Обратите внимание, что последняя строка будет работать только для URL-адресов этой структуры: /foo/bar/.Он не будет работать с /foo/bar (это никогда не должно происходить, поскольку у нас есть специальное правило перенаправления для добавления конечной косой черты), а также с более длинными URL-адресами, такими как /foo/bar/meow/ - вам нужно будет продублировать и изменить последние 2 строки.

Кроме того, если есть папка, которая соответствует URL (например, foo/bar/), правило также не будет работать.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...