Перенаправление всех URI в скрипт возможно с помощью htaccess - PullRequest
1 голос
/ 27 октября 2009

Я пытаюсь спроектировать небольшой сайт, где большая часть (95%) ресурсов сайта будет передаваться через домашний вид сценария PHP, а остальные 5% размещаются на поддомене (фоновые изображения, логотипы и т. Д. Я хотел бы, чтобы всякий раз, когда вызывается страница, скажем www.example.com/blog/My_trip_to_the_andes, эта страница будет htdocs/nexus.php и этот скрипт сможет узнать, какой URI был запрошен. По этому URI скрипт будет определять, что запрашивает пользователь, и генерировать его. Когда перенаправления происходят, заголовки необходимо поддерживать, поэтому скрипт получает любые данные POST или данные COOKIE.

Я полагаю, что это можно сделать с помощью .htaccess в корневом каталоге сайта. Но у меня мало опыта в .htaccess, и документация , похоже, не говорит об этом.

Это даже хорошая идея? Я хочу, чтобы каждый запрос страницы проходил через сценарий, чтобы я мог регистрироваться, выполнять 404 отслеживания и перенаправления, сохранять межсайтовые запросы ресурсов и другие вещи, о которых я даже не могу думать.

Ответы [ 2 ]

1 голос
/ 29 октября 2009

Поскольку ваши статические ресурсы находятся в другом домене, вы можете отправлять все запросы в ваш файл nexus.php с этим mod_rewrite правилом:

RewriteEngine on
RewriteRule !^nexus\.php$ nexus.php [L]

Исходный запрошенный URL-адрес будет доступен в $_SERVER['REQUEST_URI'] (обратите внимание, что он также содержит запрос URL-адреса, а не только путь URL-адреса).

Но если у вас есть другие файлы, доступ к которым вы хотите разрешить, вы можете исключить их, добавив следующее условие к предыдущему правилу:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^nexus\.php$ nexus.php [L]

Теперь только запросы, которые нельзя напрямую отобразить в существующие файлы (!-f), переписываются в nexus.php .

1 голос
/ 27 октября 2009

.htaccess; -

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /htdocs/nexus.php [L]
</IfModule>

И имя файла, которое было фактически вызвано, должно быть доступно как $_SERVER['REQUEST_URI']

...