2011-12-21 13 views
1

と.PHP拡張を無視:ハウツーですか?バニティURL&Iは完全に働いて、次の.htaccessを持っているの.htaccess

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [L] 
RewriteRule ^(.*)$ http://www.mysite.com/mypage.php?u=$1 [NC] 

これは私がこのようなURLを記述することができます:

http://www.mysite.com/peter => http://www.mysite.com/mypage.php?u=peter 

しかし、どのような場合私は、既存のファイルの.php拡張子を書くのを避けるための妥当な規則を持っていますか?私は私のCURRのhtaccessファイル(しかしdoesntの仕事)にこれを追加しようとした

http://www.mysite.com/contact (contact.php exists on file) 

:つまり

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

を、私は虚栄心のURLを持ち、同じ.htaccessファイルで拡張子.phpを無視したいと思います。


SOLVED!ウルリッヒPalhaマリオ(へ おかげで発注し、LAST [L]フラグについて知らなかった!

RewriteEngine on 
# Unless directory, remove trailing slash 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/$ http://www.mysite.com/$1 [R=301,L] 

# Redirect external .php requests to extensionless url 
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ 
RewriteRule ^(.+)\.php$ http://www.mysite.com/$1 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [L] 
RewriteRule ^(.*)$ http://www.mysite.com/mypage.php?u=$1 [NC] 
+0

連絡先のルールは.htaccessの一番上に表示されますか?そうでない場合は、RewriteEngineを下に移動して、 –

+0

に移動します。http://stackoverflow.com/q/4026021/911182 – Herbert

+0

これをチェックしてください:http://stackoverflow.com/a/8371815/1044340 – Nonym

答えて

1

それは秩序の問題だ。RewriteRulesは、彼らが.htaccessの
参照に記載されている順序で適用されていますEverything You Ever Wanted to Know about Mod_Rewrite Rules but Were Afraid to Ask?

だけで、最初の書き換えステートメントとして、あなたの新しいブロックを追加[LAST]フラグを追加し、それが動作するはずです。

このルールは、無条件で動作します(任意ののRewriteCondによって守られていない)ので、常にすべてのRewriteRulesの最後でなければなりません:

RewriteRule ^(.*)$ ... 
(そして、すべての先行RewriteRulesができれ [L]旗を運ぶ必要があります。あなたはそこに回避策のビットを持っている)私にとって

0

このコードの動作を: "は/ etc/apache2の/サイト利用可能/デフォルト" で

または "httpd.confの"

デフォルトのディレクトリ

... 
    <Directory /> 
     ... 
     Options FollowSymLinks 
     AllowOverride All 
     ... 
    </Directory> 
... 

またはサイトの特定のサイトディレクトリでこれらのオプション(少なくとも)持っている必要があります

... 
    <Directory "/var/www/my-site"> 
     ... 
     Options FollowSymLinks 
     AllowOverride All 
     ... 
    </Directory> 
... 

および作成または編集サイトのディレクトリにある「.htacces」(例えば、「/var/www/my-site/.htaccessを」)と、このコードを追加します。

AddType application/x-httpd-php htm html php 
AddHandler application/x-httpd-php .htm .html 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 
関連する問題