0

ユーザーが入力した場合でも、index.phpをURLに表示したくありません。これは可能ですか?

これは、何回か試した後のバリエーションです。私は何度か近づきましたが、これが今のところです。

RewriteEngine On  
RewriteBase /sub-dir/  
RewriteCond %{REQUEST_URI} index\.php$  //If URL ends in index.php
RewriteRule (.*)index\.php $1  //Somehow remove index.php from the url
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule . index.php [L]  

現在、パーマリンクを設定しています。ユーザーがdomain.com/sub-dir/my-perma-lin/と入力すると、my-perma-linkに基づいてページ上にMyPermaLinkのような文字列が生成されます。ユーザーがindex.phpで終わるURLを送信すると、URLからそのURLが削除され、それ以外はすべてそのままになります。

domain.com/sub-dir/index.php-> domain.com/sub-dir/
domain.com/sub-dir/my-perma-link/index.php-> domain.com/sub-dir/ my-perma-link

http://htaccess.madewithlove.be/にかなりの数のルールを記述しましたが、これは完全に機能しますが、(Dreamhostに)アップロードしても何も機能しません。

これは、たとえば、テスターに​​従って機能するはずです

RewriteEngine On  
RewriteBase /sub-dir/  
RewriteCond %{REQUEST_URI} \.php  //Not needed but thought it would/should help
RewriteRule (.*)(index\.php)+ $1 [L,R=301,NC]

ただし、/sub-dir/以降のすべてを削除するだけです。

私は非常に明白な何かを見逃しているか、それは不可能です...

4

1 に答える 1

1

ルールにいくつかのフラグを追加する必要があります。

RewriteEngine On  
RewriteBase /sub-dir/  
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.php(\?|\ )
RewriteRule ^ /%1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule . index.php [L]  

RewriteCond %{REQUEST_URI} index\.php$の正規表現によってチェックされているため、条件を破棄できますRewriteRule。正規表現の最後にaを含め、書き換えを停止してリダイレクトするため$のフラグを含める必要があります。LR=301

于 2012-10-18T06:26:31.007 に答える