2011-10-24 15 views
1

私は.htaccess Mod Rewriteを使用してURLをindex.phpに送信し、URLを解析して自分のウェブサイトの各ページを構築します。 これは完璧に動作し、.htaccessではなくPHPを使用してクリーンURLを簡単に管理できるようになりました。htaccess RewriteCond、RewriteRuleの複数の条件

例:http://domain.com/some/url/here/ - >がindex.phpに行く、複数のPHPファイルにページをロードし送信することなく、しかし、私は(特定のPHPファイルは通常のPHPファイルとして読み込むことができるようにしようとしている一緒に

を置きます解析するindex.phpへのURL)。

例:http://domain.com/some/url/here/は、上記のように動作します。

<IfModule mod_rewrite.c> 

    RewriteEngine On 

    RewriteCond $1 !^specialexception\.php$ [NC] 
    RewriteRule !\.(css|gif|jpg|png|ico|txt|xml|js|pdf|htm|zip)$ /path/to/index.php [NC,L] 

</IfModule> 

しかし、のRewriteCondラインは単純に、今は無視されます: http://domain.com/specialexception.phpは、私は次のコードを持っている

をindex.phpに送信することなく、通常のPHPファイルとしてロードします。

私はどんなヘルプ/アイデアにも感謝します!

ありがとうございます。

答えて

2

この作品、なぜ私はわからないけれども、私は、それを考え出した:

彼らは逆の順序で起こったので、私は周りのルールを切り替えます。次のように動作 コードは次のとおりです。

RewriteCond %{REQUEST_URI} !\.(css|gif|jpg|png|ico|txt|xml|js|pdf|htm|zip)$ 
RewriteRule !(specialexception)+\.php)$ /path/to/index.php [NC,L] 

この解決策の問題: 「specialexception.phpは」実際のRewriteRule行に、最後のルールとしてリストされているので、それが唯一ONEのための問題を解決しますファイル例外。この周り

一つ厄介な方法は、正規表現の最後の行にパイプを使用することがあります

RewriteCond %{REQUEST_URI} !\.(css|gif|jpg|png|ico|txt|xml|js|pdf|htm|zip)$ 
RewriteRule !(specialexception|anotherexception|foo|bar)+\.php)$ /path/to/index.php [NC,L] 

誰もが複数のファイルに対して複数の例外を追加する方法について良いアイデアを持っている場合は、私がしてみたいです知っている!

+0

私が作業している.htaccessファイルは、サブフォルダに保存されています。 Webルートにはhtaccessファイルもありますが、サブフォルダのhtaccessファイルのRewriteRulesによって上書きされる必要があります。サブフォルダhtaccessファイルは/path/to/.htaccessのようなものに保存されます – Jay

2
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_URI} !(specialexception)\.php$ 
    RewriteCond %{REQUEST_URI} !(anotherexception)\.php$ 
    RewriteRule !\.(css|gif|jpg|png|ico|txt|xml|js|pdf|htm|zip)$ index.php [NC,L] 
</IfModule> 

これは問題なく機能します。 .htaccessがindex.phpのような同じディレクトリにある場合、Webルートからのパスは使用しないでください。代わりに.htaccess-fileに相対的なパスを使用してください。