У меня возникли проблемы с получением правильной конфигурации для файла .htaccess.
Я сделал небольшой сайт, используя шаблон mvc, и все URL-адреса выглядели как site.com/appname/public/index.php?param=page. Я пытаюсь получить все URL-адреса как site.com/page. Я искал документы Apache, но все еще не понимаю ...
Вот что у меня сейчас в каталоге / public:
Options -MultiViews
RewriteEngine on
RewriteBase /appname/public/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
И это то, что у меня есть в корневом каталоге:
RewriteEngine On
RewriteRule ^(.*)$ appname/public [R=301,L]
Это работает нормально, он перенаправляет на index.php (в / public каталог) и переписывает все URL-адреса в site.com/appname/public/page.
Теперь я пытаюсь получить больше, и я бы также спрятал / appname / public, но я не могу понять, как это сделать. Должен ли я объединить больше RewriteRule для соответствия "/ appname / public"?
Какие-либо предложения?
Большое спасибо!
РЕДАКТИРОВАТЬ: больше информации о том, чего я пытаюсь достичь.
У меня есть дерево каталогов, например:
htdocs
|---appname
|
|---app
| |---other_dirs
| |---other_files
|
|---public
|---some_dirs/file
|--- index.php
Чтобы получить доступ к моим страницам, мне нужно указать браузеру на index.php и передать некоторое значение GET. Итак, все URL-адреса должны выглядеть так:
site.com/appname/public/index.php?val=page
Это то, что у меня есть прямо сейчас (с правилами выше)
site.come/appname/public/page
И это то, что я пытаюсь получить ...
site.com/page
Я не понимаю, как переписать / скрыть также среднюю часть, сохранив последнюю со структурой «? Url = $ 1» («url» будет обработан в контроллере, проанализирован и т. Д.).
Надеюсь, так понятнее.
Спасибо! :)
Я не понимаю вопроса. Просьба уточнить.
Находится ли каталог RewriteBase в корневом каталоге документов? Что вы пытаетесь устранить?
Руководство Apache Mod_Rewrite
предоставляет множество примеров и подробностей о том, как управлять mod_rewrite
Сначала загляните туда и, пожалуйста, ответьте более подробно о том, как выглядит ваша установка.
Это взято с этой страницы и объясняет, почему вы используете rewritebase. Все ли папки, которые вы хотите усечь, находятся в папке htdocs, или они находятся вне общедоступного docroot, htdocs или www или как там вы назвали корневой каталог документов?
RewriteBase Directive Description: Sets the base URL for per-directory rewrites Syntax: RewriteBase URL-path Default: None Context: directory, .htaccess Override: FileInfo Status: Extension Module: mod_rewrite The RewriteBase directive specifies the URL prefix to be used for per-directory (htaccess) RewriteRule directives that substitute a relative path. This directive is required when you use a relative path in a substitution in per-directory (htaccess) context unless either of the following conditions are true: The original request, and the substitution, are underneath the DocumentRoot (as opposed to reachable by other means, such as Alias). The filesystem path to the directory containing the RewriteRule, suffixed by the relative substitution is also valid as a URL path on the server (this is rare). In the example below, RewriteBase is necessary to avoid rewriting to http://example.com/opt/myapp-1.2.3/welcome.html since the resource was not relative to the document root. This misconfiguration would normally cause the server to look for an "opt" directory under the document root. DocumentRoot /var/www/example.com Alias /myapp /opt/myapp-1.2.3 RewriteEngine On RewriteBase /myapp/ RewriteRule ^index\.html$ welcome.html