Использование mod_write для перенаправления доменов в URL на php скрипт - PullRequest
0 голосов
/ 14 июля 2010

Я пытаюсь использовать mod_rewrite, чтобы перенаправить домен в URL сайта на скрипт php. Например:

http://example.com/http://somedomain.com

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

http://example.com/test.php?domain=http://somedomain.com

Я пытался сделать это с помощью следующего RewriteRule

RewriteEngine On
RewriteRule ^(.*)$ /test.php?domain=$1 [L]

но мне не повезло. Кто-нибудь знает правильный RewriteRule для использования или есть лучший способ сделать это?

Спасибо

Ответы [ 2 ]

0 голосов
/ 23 августа 2010

Просто выяснил это (через месяц!) И решил поделиться, чтобы это могло помочь кому-то еще.

Используйте следующий файл .htaccess, чтобы перенаправить все запросы в ваш файл index.php (или куда вы хотите).

<IfModule mod_rewrite.c>

#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
RewriteRule ^(.*)$ index.php?/$1 [L]

</IfModule>

теперь мы можем использовать $ _SERVER ['REQUEST_URI'], чтобы получить запрошенный URI.

Например, если запрошенный URL-адрес http://example.com/http://google.com, $ _SERVER ['REQUEST_URI'] будет установлен на 'http://google.com'

0 голосов
/ 14 июля 2010

Это можно сделать, но только если RewriteRule указано в контексте на сервер , что означает, что вы должны иметь возможность редактировать конфигурацию для VirtualHost илисервер в целом (httpd.conf).В этом случае у вас будет нормально работать правило.

Определение правила в .htaccess не работает, потому что это происходит на этапе исправления обработки запросов Apache, то есть после того, как Apache пытается отобразитьзапрос к файловой системе (и, следовательно, после ошибок Apache из запроса).Если у вас нет доступа к необходимым файлам конфигурации, самый очевидный обходной путь для этого - просто не передавать схему http:// как часть URL.

Ваше правило все равно будет работать, но из-закак mod_rewrite работает в контексте для каждого каталога, вам, вероятно, следует также предусмотреть это, чтобы предотвратить цикл перенаправления (L и явная группа захвата также не нужны):

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ /test.php?domain=$0

downforeveryoneorjustme.com идет, он работает на сервере Google Frontend, который, как сообщается, является модифицированной версией Apache (хотя я сам не особо проверял это), поэтому я думаю, что они ушли спервый вариант, или есть какая-то совершенно другая система;Я не уверен.

...