Перенаправление .htaccess, если ЛЮБАЯ строка запроса присутствует? - PullRequest
2 голосов
/ 19 ноября 2010

В настоящее время у меня есть следующий .htaccess.

<IfModule mod_suphp.c>
 suPHP_ConfigPath /home/abc/php.ini
</IfModule>

RewriteEngine on
RewriteCond $1 !^(index\.php|media|css|js|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

AuthType Basic
AuthName "Está dominado!!"
AuthUserFile "/home/abc/.htpasswds/public_html/passwd"
require valid-user

Теперь, я хотел бы, чтобы после какой-либо строки запроса была найдена какая-либо строка запроса.

Итак: Если у нас есть:

http://www.abc.com/?somethinghere234

Следует перенаправить на:

http://www.abc.com/

Если у нас есть:

htpp: //www.abc.com/something/? Id212

Перенаправить на:

htpp: //www.abc.com/something/

ОБНОВЛЕНИЕ: Я пробовал это:

TRY A)

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule .* /index.php/ [L,QSA]

Если прыгнуть через ^ (. *) $, То в строке запроса будет разрешено что угодно ...

Я также пробовал это:

TRY B)

RewriteEngine на RewriteCond $ 1! ^ (Index.php | media | css | js | images | robots.txt) RewriteCond% {QUERY_STRING}^ (. ) $ RewriteRule ^ (. ) $ http://abc.com/ [L]

Возвращает внутреннюю ошибку сервера 500.

TRY C)

RewriteEngine on
RewriteCond $1 !^(index\.php|media|css|js|images|robots\.txt)
#RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$ http://abc.com/ [R=302,L]

Я конфess Я вроде как заблудился в этом .htaccess sintax.

TRY D)

RewriteEngine on
RewriteCond $1 !^(index\.php|media|css|js|images|robots\.txt)
RewriteCond %{REQUEST_URI} !^/
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$ http://abc.com/ [R=302,L]

Пожалуйста, совет, MEM

Ответы [ 4 ]

5 голосов
/ 19 ноября 2010

Должно работать следующее:

RewriteCond %{QUERY_STRING} .
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^ /index.php/? [L]
  1. проверьте, есть ли у вас что-то в QUERY_STRING (ваша также принимает пустую строку)
  2. ваш чек для предотвращения бесконечного перенаправления
  3. перенаправить куда хотите.

Из документации Apache:

Когда вы хотите стереть существующий строка запроса, конец подстановки строка со знаком вопроса

РЕДАКТИРОВАНИЕ (снова): В качестве внешнего перенаправления (вам может даже не понадобиться второй RewriteCond, если в вашем приложении вообще нет строки запроса):

Это скажет клиенту запрашивать тот же URI без строки запроса.

RewriteEngine on

# redirect to same URI, but without query string
RewriteCond %{QUERY_STRING} .
RewriteRule ^ %{REQUEST_URI}? [R=301]

# CodeIgniter "magic"
RewriteCond $1 !^(index\.php|media|css|js|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
2 голосов
/ 19 ноября 2010

Из вашего описания я не был уверен, что именно вы хотели, поэтому вам следует оставить или удалить второй RewriteCond в зависимости от ваших конкретных потребностей.

RewriteEngine On

# Remove the query string with a redirect
RewriteCond %{QUERY_SRING} !=""
# But only if the path ended with a /
# (remove this to redirect anything with a query string)
RewriteCond %{REQUEST_URI} /$
RewriteRule .* /$0? [R=301,L]

# Then perform your internal rewrite
RewriteCond $1 !^(index\.php|media|css|js|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
1 голос
/ 19 ноября 2010

Возможно, потому что там добавлено QSA - это означает Строка запроса: Добавить .

0 голосов
/ 21 декабря 2013
RewriteCond %{REQUEST_URI} ^(.*/)([^/]+)$
RewriteRule . %1 [R=301,L]
...