1

ドメインでいくつかの書き換えを試しています。htaccess は現在、スラッシュの後の何かを考慮に入れるように設定されています。例えば。mysite.dev/page1/

これを次のように変更したい: mysite.dev/page1.html

そのため、元のリンクを転送し、次のように .html ページの新しい書き換えをセットアップしました。

Redirect 301 /page1/ http://mysite.dev/page1.html
Redirect 301 /page1 http://mysite.dev/page1.html
Redirect 301 /page2/ http://mysite.dev/page2.html
Redirect 301 /page2 http://mysite.dev/page2.html
Redirect 301 /page3/ http://mysite.dev/page3.html
Redirect 301 /page3 http://mysite.dev/page3.html

RewriteRule ^page1.html$ page.php?slug=page1 [L]
RewriteRule ^page2.html$ page.php?slug=page2 [L]
RewriteRule ^page3.html$ page.php?slug=page3 [L]

RewriteRule ^([^/.]+)/?$ page.php?slug=$1 [L]
RewriteRule ^([^/.]+)/([^/.]+)/?$ page.php?slug=$2 [L]

mysite.dev/page1.html に移動すると、正常に動作します。しかし、mysite.dev/page1/ を配置すると、mysite.dev/page1.html?slug=page1 に書き換えられます。そのため、残りのルールは引き続き遵守しているようです。

これを回避するためのヘルプ/提案はありますか?

ありがとう。

4

1 に答える 1

1

mod_alias と mod_rewrite ルールを混在させないでください。

また、ループを避けるために、最初の RewriteRule の直前に次のルールを追加します。

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
## don't do anything
RewriteRule ^ - [L]

完全な .htaccess:

RewriteEngine On

RewriteCond %{THE_REQUEST} /(page1|page2|page3)[/\s\?] [NC]
RewriteRule ^ /%1.html [L,R=301]

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
## don't do anything
RewriteRule ^ - [L]

RewriteRule ^(page1|page2|page3)\.html$ page.php?slug=$1 [L,QSA,NC]

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

RewriteRule ^([^/.]+)/([^/.]+)/?$ page.php?slug=$2 [L,QSA]
于 2013-11-12T09:28:36.433 に答える