Измените .htaccess, чтобы сделать URL? Variable = true, изменить URL / переменную? - PullRequest
1 голос
/ 22 ноября 2011

Я пытаюсь изменить свой файл .htaccess, чтобы при переходе к:

http://www.example.com/index.php?login=true он доходил до http://www.example.com/login.

У меня есть этот код, который удаляетindex.php (что делает вышеприведенное выглядит как http://www.example.com/?login=true).

RewriteEngine On
#remove index.php
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{THE_REQUEST} !/system/.*
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]
RewriteCond %{THE_REQUEST} ^GET

Ответы [ 4 ]

0 голосов
/ 23 ноября 2011

попробуйте следующее в .htaccess в корневом каталоге example.com

RewriteEngine On
RewriteBase /

#rewrite http://www.example.com/anything to http://www.example.com/index.php?anything=true
RewriteCond %{REQUEST_URI} ^/([-a-zA-Z0-9]+)$ [NC]
RewriteCond %1 !system [NC]
RewriteRule . index.php?%1=true [L]


#301 redirect requests for example.com/index.php?anything=true to example.com/anything
RewriteCond %{REQUEST_URI} ^/index\.php$ [NC]
RewriteCond %{QUERY_STRING} ^([^=]+)=true$ [NC]
RewriteRule . /%1? [L,R=301]
0 голосов
/ 22 ноября 2011

Следующее должно работать, хотя в строке для исключения / system / * может быть что-то не так.Попробуйте протестировать с этим комментарием.

RewriteEngine On
RewriteCond %{QUERY_STRING} ([^=]*)=true [NC]
RewriteCond %{THE_REQUEST} ^/system/.*
RewriteRule index.php /%1? [R=301,L]

Помогла следующая страница: http://wiki.apache.org/httpd/RewriteQueryString

Этот тестер классный, но в нем есть несколько ошибок: http://martinmelin.se/rewrite-rule-tester/

0 голосов
/ 22 ноября 2011

Вам нужно проверить QUERY_STRING в RewriteCond.Я думаю, что это должно сделать:

RewriteEngine On
#remove index.php
RewriteCond %{QUERY_STRING} ([^=]*)=true [NC]
RewriteCond %{THE_REQUEST} !/system/.*
RewriteRule ^index\.php /%1? [R=301,L]

Это должно перенаправить все, что имеет index.php? = True в / action

0 голосов
/ 22 ноября 2011

Я бы настроил ваше правило переписывания наоборот:

RewriteEngine On
RewriteRule ^login$ /index.php?login=true

Таким образом, если пользователь переходит к http://yourserver.com/login, фактически используется страница http://yourserver.com/index.php?login=true,, но в браузере отображается первый URL-адрес. Я полагаю, это то, что вы пытаетесь достичь.

Если вам действительно нужно сделать это в том направлении, о котором вы просили, вы можете попробовать что-то вроде этого:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^login=true$
RewriteRule ^index\.php$ /login [L,R=301]

Это не удастся, если есть дополнительные параметры запроса.

Если вы хотите перенаправить http://yourserver.com/index.php на http://yourserver.com, вы можете просто добавить следующее правило перезаписи:

RewriteRule ^index\.php$ / [L,R=301]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...