1

mod_rewrite を機能させようとしているだけで、何も機能していないように見える大規模なメンタル ブロックが発生しています。

私の .htaccess ファイルは私のファイルのファイル拡張子を隠しており、これが私の書き換えが機能しない理由かどうかはわかりません。

ここに私の .htaccess コードがあります:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1.php?project=$2
Options +FollowSymLinks

書き換えルールを使用して、projects.php?project=1 を projects/project/1 として表示しようとしています

誰かが私が間違っていることを教えてくれれば、本当に感謝しています。

4

2 に答える 2

1

問題は、L(Last) フラグでルールを終了せず、ルールを順序付けることです。コードを次のように置き換えます。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^([^/]+)/([^/]+)/$ /$1.php?project=$2 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
于 2013-04-30T08:40:47.823 に答える
0

RewriteCond最初のルールにのみ適用されます。2 番目のルールに同じ条件が必要な場合は、それらを複製する必要があります。

順序が重要です。条件が常に真であるため、最初のルールが最初に適用され、次にandに書き換え/projects/project/1られます。この無限ループを防ぐには、条件を追加する必要があります。/projects/project/1.php/projects/project/1.php.php/projects/project/1.php.php.php/path/to/projects.php -f

このため、2 番目のルールは試行されません。

最後に、正規表現 ^([^/]+)/([^/]+)/$が一致しませんprojects/project/1(\d+)プロジェクト番号を次のように取得するには、末尾を追加する必要があります。$3

RewriteRule ^([^/]+)/([^/]+)/(\d+)$ /$1.php?project=$3

また

RewriteRule ^([^/]+)/([^/]+)/(\d+)$ /$1.php?$2=$3

ルールがより一般的である必要がある場合。

于 2013-04-30T08:34:24.357 に答える