2016-09-17 8 views
1

イムをリダイレクトされていません。の.htaccessのRewriteRuleが、このようなリンクをリダイレクトしようとしているページ

RewriteRule ^/strangers/([0-9]+)$ /strangers/strangers.php?img=$1 [R=301] 

しかし、事は起こっている。何が間違っているのか分かりません - 間違った順序で書きますか?

# use php in html files i think 
AddHandler application/x-httpd-php5 .html 

DirectoryIndex home.html 

RewriteEngine On 

#removes html extension 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.html [NC] 

RewriteRule ^/strangers/([0-9]+)$ /strangers/strangers.php?img=$1 [R=301] 

実際にブラウザに表示されたリンクの方法によって:ここに私の完全な.htaccessファイルは、私は見ていないよという相反する何かがあります念のためにありますか?

+0

あなたの最初のルールが一致し、私はあなたが働いていた404 – Vrac

答えて

1

あなたの最初のルールが一致してstrangers/2.htmlに書き換えるために起こっている、あなたが最初のルールからstrangers URIを除外するための条件が必要になります:

RewriteBase/
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^/strangers/.*$ 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 

RewriteRule ^strangers/([0-9]+)$ /strangers/strangers.php?img=$1 [L] 

私は最後のルールから301のフラグを削除しました。私はあなたが本当に/strangers/strangers.php?img=2にリダイレクトするのではなく、むしろブラウザのURLバーにstrangers/2と表示し、apacheが/strangers/strangers.php?img=$1をカバーしていると仮定しています。

+0

おかげで、取得されますので、あなたのサーバー上に存在しないと仮定し、 '見知らぬ人/ 2.html'に書き換えしようとしています。どのように私たちは.html拡張の削除から見知らぬ人のディレクトリを除外しますが、書き直しでは、その拡張子を持たないパターンを参照していますか? – carrmx

+0

'RewriteCond'は、ブラウザが要求したものとの文字列の一致に過ぎません。実際のディレクトリを参照しているわけではありません。 '/ strangers /'で始まるURIにマッチしますが、 '。*'は基本的には何のためのワイルドカードです。あなたが望むなら、そこにパターンを置くこともできます。 rewriteruleの最初の引数についても同じことが言えます。要求されたブラウザとの文字列一致です。あなただけの0から9までの数字を照合し、キャプチャされた([0-9] +)とは対照的に、それが何かを取ると、そこにも/(.*)$ '見知らぬ人を置くことができます。 – Vrac

関連する問題