URL на сервере apache по умолчанию не является файлом .php после добавления / - PullRequest
1 голос
/ 07 января 2011

Обычно URL выглядит так: http://www.domain.com/product.php/12/

откроет product.php и будет использовать / 12 / в качестве параметров запроса, которые затем может обработать мой PHP-скрипт для получения нужной информации о продукте. Однако, когда я перенес весь этот сайт, после его разработки, на новый сервер, я получаю ошибку 404, потому что на этом сервере не по умолчанию используется материнский каталог / файл в случае отсутствия запрошенных каталогов.

Я смутно помню, как узнал, что обычно это обычная функция apache, но я не могу вспомнить, как его настроить или как им манипулировать ... если есть метод .htaccess, чтобы добиться этого, было бы здорово.

Ответы [ 3 ]

2 голосов
/ 07 января 2011

То, на что вы ссылаетесь - это mod_rewrite. Официальные документы для этого здесь: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

Вы можете настроить его либо в своем определении VHost (рекомендуется), либо в файле .htaccess.

Предполагая, что вы хотите отобразить все запросы на ресурс, который Apache не может обслуживать (например, файлы, которые не существуют), на products.php, вы можете использовать следующее:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*)$ /products.php?request=$1 [NC,L]

Затем вы можете использовать $_GET['request'], чтобы получить запрошенный путь и взять его оттуда, в зависимости от того, что вы хотите сделать. Обычно я рекомендую позволить mod_rewrite обрабатывать запрос и передавать соответствующие атрибуты вашему PHP, но если вы не знакомы с mod_rewrite, вероятно, это проще сделать в вашем PHP.

1 голос
/ 07 января 2011

вы можете использовать мод переписать движок, чтобы сопоставить это с

http://www.domain.com/product.php?arg=12

Мод переписать детали: http://forum.modrewrite.com

Пример:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^files/([^/]+)/(.+) files.php?app=$1&file=$2 [NC]

это правило перезаписи сопоставит любой запрос, содержащий files / firstrPart / secondpart , со сценарием files.php

все, что находится между первым и вторым слэшем после файлов, будет передано как параметр app , а остальные - как file

По сути, вы определяете регулярное выражение с некоторыми дочерними файлами и указываете, какой скрипт действительно должен быть вызван.

Вы можете ссылаться на подшаблоны с $ n, где n - это индекс шаблона на основе 1.

Веселитесь.

ПРИМЕЧАНИЕ: это предельное упрощение переписывания модов. Пожалуйста, сделайте некоторое исследование, прежде чем использовать его, потому что это может пойти ужасно неправильно ...

0 голосов
/ 07 января 2011

Директива, которую вы ищете - «AcceptPathInfo on». Функция MultiViews mod_negotiations также дает вам возможность не включать ".php", что является еще одним распространенным явлением, которое люди злоупотребляют mod_rewrite.

...