0

すべての .php ファイルを .html 拡張子に変更しようとしていますが、使用しているルールが .htaccess ファイル内の他のルールと干渉しています。どちらか一方のルール セットを機能させることができるようです。

コードを確認してください:

Options +FollowSymLinks
RewriteEngine On

##Locations Pages
RewriteRule    ^([^/\.]+)\.html?$                           locations.php?locationslug=$1&Submit=Submit                 [L]

##Listing Pages
RewriteRule    ^([^/\.]+)\/([^/\.]+)\.html?$                listings.php?locationslug=$1&categoryslug=$2                [L]

##Vendor Pages
RewriteRule    ^([^/\.]+)\/([^/\.]+)\/([^/\.]+)\.html?$     vendors2.php?vendorslug=$3&locationslug=$1&categoryslug=$2  [L]

RewriteRule ^(.*)\.html$ $1.php [L]

このRewriteRule ^(.*)\.html$ $1.php [L]行をファイルの 3 行目に配置すると、フラットな .php ページは .html として機能しますが、次のルールではエラー (404 Not Found) がスローされます。

この行RewriteRule ^(.*)\.html$ $1.php [L]を最後の行にすると、フラット ページが .html として機能しなくなります。

いつものように、建設的な意見は大歓迎です。前もって感謝します!

4

1 に答える 1

0

次のように、これらのルールの順序を最も具体的なものから最も一般的なものに変更してみてください。

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

##Vendor Pages
RewriteRule ^([^/]+)/([^/]+)/([^.]+)\.html?$ vendors2.php?vendorslug=$3&locationslug=$1&categoryslug=$2 [L,QSA,NC]

##Listing Pages
RewriteRule ^([^/]+)/([^.]+)\.html?$ listings.php?locationslug=$1&categoryslug=$2 [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/.]+)\.html?$ $1.php [L,NC]

##Locations Pages
RewriteRule ^([^/.]+)\.html?$ locations.php?locationslug=$1&Submit=Submit [L,QSA,NC]

ルール # 3 と 4 の両方が同じ URI パターンに一致することに注意してください。

于 2013-05-08T16:10:12.600 に答える