... но все данные об активах (js, css) не работают (404 не найдено).Как я могу установить правильные правила?
Это, скорее всего, вызвано использованием относительных URL-путей к вашим ресурсам.Вам нужно «исправить» ваши URL-пути, чтобы они были относительными или относительными.Это не то, что должно быть исправлено в .htaccess
, иначе вы переписываете все в порядке.
См. мой ответ на следующий вопрос в стеке для веб-мастеров, касающийся использования относительного URLпути к статическим ресурсам при использовании перезаписи URL:
RewriteCond %{HTTP_HOST} ^(www.)?testdomain1.com$
RewriteRule ^(/)?$ pages/%{HTTP_HOST}/index.html [L]
Это только перезаписывает запросы для корня, т.е.testdomain1.com/
.И не testdomain1.com/foo
- это намеренно?
Мне нужен доступ к любой странице (example.com/page.html
), не только index.html
.
Если к этомуВы имеете в виду, что запрос формы http://testdomain1.com/foo
должен быть переписан на /pages/testdomain1.com/foo
, тогда вам нужно будет изменить вышеприведенное на что-то вроде следующего:
RewriteCond %{QUERY_STRING} !^la=[\w-]+
RewriteCond %{HTTP_HOST} ^(?:www.)?(testdomain1\.com)$
RewriteRule !^pages/ pages/%1%{REQUEST_URI} [L]
Обратите внимание, что это переписывает все, включая CSS, JS и изображения.
Первое условие (директива RewriteCond
) исключает URL-адреса, содержащие параметр URL la
.(Эти URL обрабатываются ниже.)
Это также исправляет ошибку в существующей директиве, в результате которой запрос на субдомен www (например, www.testdomain1.com
) привел бы к неправильной перезаписи.Обратная ссылка %1
в строке substitution содержит запрашиваемый домен, за исключением необязательного поддомен www
.(Я предполагаю, что у вас нет подкаталога www.testdomain1.com
?) Хотя, возможно, вы уже должны канонизировать www / non-www ранее в файле конфигурации.
(Не забудьте экранировать буквальные точки.)
ОБНОВЛЕНИЕ:
Я пытался использовать этот случай для нескольких доменов, а не только для testdomain1.com
.Так что мне нужно изменить RewriteCond %{HTTP_HOST} ^(www.)?testdomain1.com$
часть.Я только что попробовал RewriteCond %{REQUEST_URI}
, но не работает.
Для нескольких доменов вы можете либо:
Дублировать блок кода выше для каждого домена иизмените домен testdomain1.com
во втором условии.
Если это относится только к 3 доменам, вы можете использовать чередование во втором условии, чтобы соответствовать любому из3 домена.Например:
RewriteCond %{HTTP_HOST} ^(?:www.)?(testdomain1\.com|testdomain2\.com|testdomain3\.com)$
Если это применимо к любому домену, сделайте регулярное выражение более общим, чтобы соответствовать любому домену.Например:
RewriteCond %{HTTP_HOST} ^(?:www.)?([a-z0-9.-]+?)\.?$
2) Когда URL-адрес запроса имеет "la" var - мне нужно переписать в каталог земли.
Пример: http://testdomain1.com/?la=template1
- set /lands/template1/
как root dir
Как уже упоминалось в моем комментарии, вам, вероятно, не следует переписывать каталог.Это не каталог, который обрабатывает запрос, а в конечном итоге файл.Переписывая в каталог, я предполагаю, что вы полагаетесь на то, что mod_dir создает внутренний подзапрос для документа индекса каталога (как указано в директиве DirectoryIndex
).В этом примере я предположу, что индекс каталога равен index.php
.
. Для этого потребуется перейти на до переписанного выше кода, поскольку он более конкретен:
RewriteCond %{QUERY_STRING} ^la=([\w-]+)
RewriteRule ^$ /lands/%1/index.php [L]
%1
(в отличие от $1
) - это обратная ссылка на захваченный шаблон в последнем сопоставленном CondPattern .Регулярное выражение [\w-]+
ограничивает значение параметра la
символами 0-9
, a-z
, A-Z
, _
и -
.Параметр la
также должен быть первым параметром URL.