Преобразовать файл web.config в .htaccess - PullRequest
1 голос
/ 07 марта 2012

Я ищу способ преобразования моих правил перезаписи IIS в файл .htaccess. Я не смог найти какой-либо инструмент для автоматического выполнения этого, и все, что я могу получить - это 500 внутренних ошибок сервера.

Файл web.config выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="RemoveTrailingSlash" stopProcessing="true">
                    <match url="^(.*?)/+$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    </conditions>
                    <action type="Redirect" url="http://{HTTP_HOST}/{R:1}" />
                </rule>
                <rule name="HaltOnTinyMCE" stopProcessing="true">
                    <match url="^tinymce/.*$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="None" />
                </rule>
                <rule name="RewriteContent" enabled="true" stopProcessing="true">
                    <match url="^.*\.(gif|jpg|png|css|js|swf|txt|xml)$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="domains/{HTTP_HOST}/{R:0}" appendQueryString="true" logRewrittenUrl="false" />
                </rule>
                <rule name="RewritePages" enabled="true">
                    <match url="^.*$" ignoreCase="true" negate="false" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="index.php" logRewrittenUrl="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Моя лучшая попытка вручную конвертировать это все еще дает мне 500 Internal Server Error. Есть предложения?

RewriteEngine on

RewriteCond /+$
RewriteRule ^(.*?)/+$ http://{HTTP_HOST}/$1 [R=301,L]

RewriteCond ^tinymce/.*$
RewriteRule ^(.*)$ $1 [L]

RewriteCond \.(gif|jpg|png|css|js|swf|txt|xml)$
RewriteRule ^.*\.(gif|jpg|png|css|js|swf|txt|xml)$ domains/{HTTP_HOST}/$1 [L]

RewriteRule ^.*$ index.php

Заранее спасибо!

1 Ответ

2 голосов
/ 07 марта 2012

Вы шли в правильном направлении, но было несколько ошибок и ненужных вещей. Вот что я придумал:

RewriteEngine on
RewriteBase /

#remove tailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ http://%{HTTP_HOST}/$1 [R=301,L]

# stop rules below from being applied if url starts with tinymce/
RewriteRule ^tinymce/.*$ - [L]

#rewrite images etc. to domains folder (unless url already starts with domain/)
RewriteCond $0 !^domains/
RewriteRule ^.*\.(gif|jpg|png|css|js|swf|txt|xml)$ domains/%{HTTP_HOST}/$0 [L]

#catch all other (I added 2 rewriteconds, to prevent rewriting existing files (including index.php))
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php
...