Как это устроено сейчас
У меня есть веб-сайт, который настроен для чистых URL-адресов с помощью apache mod_rewrite следующим образом:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L,QSA]
На сайте также используется CMS под названием Cockpit, которая находится в моем общедоступном каталоге с аналогичным файлом .htaccess для его чистых URL-адресов:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
В обоих случаях RewriteEngine On
присутствует также (конечно).
Теперь на apache это приводит к тому, что URL-адреса моего сайта переписываются следующим образом
http://domain.com/a
http://domain.bom/b
и URL-адреса кабины делают практически то же самое:
http://domain.com/cockpit/a
http://domain.com/cockpit/b
Что я ищу Итак, я искал, чтобы оставить apache для lighttpd, и я немного возился с их синтаксисом и конфигурацией mod_rewrite, но я столкнулся с проблемой, когда URL-адреса кабины не совсем чистые. Вот как я его настроил на lighttpd:
$HTTP["host"] == "domain.com" {
server.document-root = "/var/www/domain.com/public_html"
index-file.names = ( "index.php" )
$HTTP["url"] =~ "^(\/cockpit)(\/[a-zA-Z0-9\.]*)*$" {
url.rewrite-if-not-file = ( "^(.*)$" => "/cockpit/" )
} else $HTTP["url"] !~ "^(\/cockpit)(\/[a-zA-Z0-9\.]*)*$" {
url.rewrite-if-not-file = ( "^(.*)$" => "/index.php" )
}
}
Эта конфигурация работает, но теперь URL-адреса кабины следующие:
http://domain.com/cockpit/index.php/a
http://domain.com/cockpit/index.php/b
Я бы хотел избавиться от index.php
часть URL-адреса, такая как apache, но я не смог заставить ее работать должным образом.
Есть какие-нибудь идеи по этому поводу? s