問題

2011-08-16 3 views
0

アイデア:私はそれを作りたいドメイン名の後に来るとの.htmlで終わるものがあるindex.phpでGET変数として扱われていること問題

例:www.test.ro/1/2/3.html実際にはwww.test.ro/index.php?var=1/2/3.htmlである必要があります。

www.test.roは、開発用の仮想ホストとして設定され、AllowOverrideの値はすべてです。

.htaccessファイルが処理されているように見えますが、すべてではありません。 'BizzareRule'のような認識されないルールを書くと、サーバーはコード500のエラーを返さずに動作します。 <IfModule mod_rewrite.c></IfModule>の間に正しいルールを置くと、同じ条件で完全に動作する他の仮想ホストがあるにもかかわらず、500エラーが発生します。ここで

は私のバーチャルホストの内容は以下のとおりです。

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName www.test.ro 
    ServerAlias test.ro 

    DocumentRoot D:/Projects/grabsite/test.ro 
    Options Indexes FollowSymLinks MultiViews 

    DirectoryIndex index.php index.html 

    LogLevel warn 
    ErrorLog D:/Projects/grabsite/test.ro/error.log 
    CustomLog D:/Projects/grabsite/test.ro/access.log combined 

    <Directory "D:/Projects/grabsite/test.ro"> 
     Options -Indexes FollowSymLinks 
     AllowOverride All 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

と.htaccessのためのテスト内容:

RewriteEngine On 
RewriteRule ^/?([^/]*)\.html$ /index.php?seo=$1 [L] 

答えて

1

あなたが無限ループに入っているようです。ルールを簡素化するために最初に試してみてください。 RewriteRule ^(.*)\.html$ /index.php?seo=$1 [L]

それとも RewriteRule ^index.html$ /index.php?seo=$1 [L]

次に、それがするRewriteCond -fとするRewriteCondでは、既存のファイル/フォルダを要求している場合は、ルールを実行しないようにするために-d持つことをお勧めします。場合によっては、ルールの無限ループを防ぐことができます

0

問題は正規表現パターンです。あなたは言った:".htaccessファイルは処理されているように見えますが、すべてではありません"

あなたのパターン^/?([^/]*)\.html$をチェックする場合は、これが唯一の(例えば/index.html)ルートフォルダ内のファイルのために働くことがわかります。

ソリューション:変化パターン^(.+)\.html$とすべてには、罰金になります - 今、それは.htmlを(例えば/index.htmlなど/hello/pink-kitten.htmlなど)で終わるANY URLと一致します。