У меня установлен WordPress в /var/www/wordpress/
и мой собственный код в /var/www/project/
Теперь возникает следующая проблема: когда я пытаюсь получить доступ example.com/client/
или example.com/admin/
он должен ссылаться на /var/www/project/
и выполните оттуда .htaccess + index.php.
Я попытался разместить директиву Alias в конфигурации Apache с частичным успехом.
Alias /admin/ /var/www/project
Alias /client/ /var/www/project
Когда я получаю доступ example.com/client/
он работает нормально, но как только я прошу example.com/client/login
это терпит неудачу с File does not exist: /var/www/project/login
ошибка.
В .htaccess
в /var/www/project
выглядит как
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/(.*)$ index.php?module=$1&task=$2 [L,QSA]
Прежде всего: моя любимая мозоль, цитата из руководство по .htaccess файлы:
Вам следует полностью избегать использования файлов .htaccess если у вас есть доступ к файлу конфигурации главного сервера httpd. Использование файлов .htaccess замедляет работу вашего http-сервера Apache. Любую директиву, которую вы можете включить в файл .htaccess, лучше установить в блоке Directory, так как это будет иметь тот же эффект с лучшей производительностью.
Во-вторых: канонический ответ почти на все вопросы о mod_rewrite: Вот
Я не уверен на 100%, но думаю, что установив RewriteBase к /
внутреннее перенаправление будет на example.com/index.php, а не на /var/www/project/index.php. Кроме того, я думаю, что PT Флаг необходим для учета соответствия псевдонима.
Вы можете попробовать
Alias /admin/ /var/www/project
Alias /client/ /var/www/project
<Directory /var/www/project>
RewriteEngine On
RewriteBase /
# Do nothing when a file or directory with the requested name exists
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* - [L]
# Use the request URL to select the correct module and task
RewriteRule ^/([^/]+)/(.*)$ /$1/index.php?module=$1&task=$2 [PT,L,QSA]
</Directory>
В документация для Alias показывает, что это ожидаемое поведение. Псевдоним добавляет любые конечные пути после пути с псевдонимом.
Я думаю, что вы хотите выбросить дополнительную информацию о пути в псевдониме с помощью
AliasMatch /(admin|client)/.* /var/www/project
Это должно отправить запрос в / var / www / project, оставив при этом URL-путь исходного запроса нетронутым для обработки RewriteRule.