Ошибки перенаправления .htaccess - PullRequest
0 голосов
/ 10 августа 2009

Прежде всего, я использую Codeigniter Framework, так что эта проблема - обходной путь, по которому CI обрабатывают URL-адреса вместе с текущими перенаправлениями, которые я настроил с помощью mod_rewrite.

Я пытаюсь получить URL-адрес, подобный этому /?gclid=somestringgoeshere, для перенаправления на /index.php?/home/gclid/somestringgoeshere.

Текущий .htaccess, который я установил, ниже

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]


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

    RewriteRule ^([^_]+)-([^_]+)-([^_]+)-([^_]+)-([^_]+)-([^_]+)-([^.]+)$ index.php?/$1_$2_$3_$4_$5_$6_$7 [L]
    RewriteRule ^([^_]+)-([^_]+)-([^_]+)-([^_]+)-([^_]+)-([^.]+)$ index.php?/$1_$2_$3_$4_$5_$6 [L]
    RewriteRule ^([^_]+)-([^_]+)-([^_]+)-([^_]+)-([^.]+)$ index.php?/$1_$2_$3_$4_$5 [L]
    RewriteRule ^([^_]+)-([^_]+)-([^_]+)-([^.]+)$ index.php?/$1_$2_$3_$4 [L]
    RewriteRule ^([^_]+)-([^_]+)-([^.]+)$ index.php?/$1_$2_$3 [L]
    RewriteRule ^([^_]+)-([^.]+)$ index.php?/$1_$2 [L]

    # Checks to see if the user is attempting to access a valid file,
    # such as an image or css document, if this isn't true it sends the
    # request to index.php

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

    # This last condition enables access to the images and css folders, and the robots.txt file
    # Submitted by Michael Radlmaier (mradlmaier)

    RewriteCond $1 !^(index\.php|images|robots\.txt|css)
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

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

RewriteRule ^?gclid=(.*)$ index.php?/home/gclid/$1 [L]

и

RewriteRule ^\?gclid=(.*)$ index.php?/home/gclid/$1 [L]

и

RewriteRule ^/?gclid=(.*)$ index.php?/home/gclid/$1 [L]

Все либо не отображают правильную страницу, либо имеют внутреннюю ошибку 500.

1 Ответ

2 голосов
/ 10 августа 2009

Запрос URI можно проверить только с помощью директивы RewriteCond :

RewriteCond %{QUERY_STRING} ^gclid=(.*)
RewriteRule ^$ index.php?/home/gclid/%1 [L]

Или более общий (рассмотрим дополнительные параметры запроса):

RewriteCond %{QUERY_STRING} ^([^&]*&)*gclid=([^&]*)
RewriteRule ^$ index.php?/home/gclid/%2 [L]

Да, кстати: директивы RewriteCond соответствуют только первой следующей директиве RewriteRule.

...