2

まず、リクエスト変数をphpスクリプトに送信するカスタムURL書き換えがあります

書き換えルールは次のとおりです。

RewriteRule ^([\w\/-]+)(\?.*)?$ test/index.php?slug=$1 [L,T=application/x-httpd-php]

そのため、test という名前のフォルダーdomain.com/slug-textに送信slug-textされるようなものにアクセスすると、.index.php

私が望むのは、すべての URL が のようdomain.com/slug-text.htmlになることですが、slug-test変数は引き続きindex.phpファイルに送信する必要があります。

私が理解できないのは、リダイレクトです。すべての古い URL をリダイレクトして、テスト フォルダーにあるファイルに送信するdomain.com/slug-text必要があります。domain.com/slug-text/domain.com/slug-text.htmlslug-textindex.php

たくさん検索しましたが、この質問に対する答えはインターネット上のどこにも見つかりませんでした。

助けてくれてありがとう。

更新:私の新しいコードは:

RewriteEngine On
Options +FollowSymlinks

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(([\w/\-]+)?[\w-])(?!:\.html)$ http://domain.com/$1\.html [L,R=301]
RewriteRule ^(([\w/\-]+)?[\w-])(/|\.html)?$ test/index.php?slug=$1 [L]

domain.com/slug-text/domain.com/slug-text.html domain.com/slug-text意図したとおりに動作するようにリダイレクトされませんdomain.com/slug-text.html

何を変更する必要がありますか?

4

2 に答える 2

3

このルール:

RewriteRule ^(([\w/\-]+)?[\w-])(/|\.html)?$ test/index.php?slug=$1 [L]

をトラップしdomain.com/slug-text、内部パラメーターに送信します。domain.com/slug-text/domain.com/slug-text.htmlslug-text/test/index.phpslug

[R=301]古い URL から新しい URL に本当にリダイレクトしたい場合は、次のようにします。

RewriteRule ^(([\w/-]+)?[\w-])/?(?!:\.html)$ http://domain.com/$1.html [L,R=301]
RewriteRule ^(([\w/-]+)?[\w-])\.html$ test/index.php?slug=$1 [L]

また、明示的なリダイレクトを使用すると、下のルールが変更され、URL の末尾が.html

また、(.htaccess にまだこれが含まれていない場合) リダイレクト ルールによってトラップされないように、既存のファイルとフォルダーの条件をフィルター処理することをお勧めします。次の行を行の前に追加するだけRewriteRuleです。

# existing file
RewriteCond %{SCRIPT_FILENAME} !-f
# existing folder
RewriteCond %{SCRIPT_FILENAME} !-d

シンボリックリンクを使用する場合:

# enable symlinks
Options +FollowSymLinks
# existing symlink
RewriteCond %{SCRIPT_FILENAME} !-l

// 追加
.htaccess ファイルは次のようになります。

RewriteEngine on
Options +FollowSymLinks
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(([\w/-]+)?[\w-])/?(?!:\.html)$ http://domain.com/$1.html [L,R=301]
RewriteRule ^(([\w/-]+)?[\w-])\.html$ test/index.php?slug=$1 [L]
于 2013-09-08T10:24:08.377 に答える
0

これは /slug-text を /slug-text.html にリダイレクトすることになっています

RedirectMatch ^/([\w-]+)/?$ http://domein.com/$1.html 

これは、slug-text が文字、数字、および _ のみの場合です。slug-text.html を php ファイルに書き換え、スラッグをパラメーターとして渡します。

RewriteRule ^([\w-]+)\.html$ test/index.php?slug=$1 [R,L] 

.htaccess に両方の行がある場合、最初の行は従来の URL から新しい URL へのリダイレクトを行い、2 番目の行はリクエストを処理します。

于 2013-09-08T10:24:19.410 に答える