Я пытаюсь запустить vBulletin 5 под lighttpd, но у меня проблемы с переписыванием URL. Вот apache .htaccess, предоставленный vBulletin.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?routestring=$1 [L,QSA]
#needed because admincp is an actual directory.
RewriteRule ^(admincp/)$ index.php?routestring=$1 [L,QSA]
</IfModule>
Если это помогает, это конфигурация IIS, предоставленная vBulletin.
<?xml version="1.0" encoding="UTF-8"?>
<!-- This file is to support redirection in IIS. It is harmless if you are running under Apache -->
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Main Redirect" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
<rule name="Admincp" stopProcessing="true">
<match url="^(admincp/)$" ignoreCase="false" />
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
У кого-нибудь есть предложения относительно эквивалента lighttpd url.rewrite? Пока все мои эксперименты провалились.
Я использую lighttpd-1.4.31-1
Я пробовал это, но это не сработало. Я думаю, это как-то связано с тем, что я неправильно эмулировал [QS] в .htaccess
url.rewrite-once = ("^(.*)$" => "index.php?routestring=$1",
"^(admincp/)$)" => "index.php?routestring=$1")
Это приблизило меня, но еще не полностью функционально.
url.rewrite-if-not-file = ("^(.*)$" => "index.php?routestring=$1",
"^(admincp/)$)" => "index.php?routestring=$1")
Регулярное выражение применяется ко всему URI запроса, включая строку запроса, поэтому вам необходимо иметь дело с этим явно. Попробуйте что-то вроде этого:
url.rewrite-if-not-file = (
"^/([^\?]+)(\?(.*))?$" => "index.php?routestring=$1&$3",
)
url.rewrite-once = (
"^/(admincp/[^\?]+)(\?(.*))?$" => "index.php?routestring=$1&$3",
)
Второй для /admincp/
может не понадобиться, так как rewrite-if-not-file
не соответствует каталогам.