クライアントがサイトにページを追加するとき、新しいページ名をRewiteRule正規表現に追加する必要があります。したがって、たとえばfwrite()を使用して、データベースから撤回された値でそのRewiteRule正規表現をPHPに変更させたいと思います。これが可能である場合、プロセスに落とし穴はありますか?
編集:PHPスクリプトでの処理が解決策になりますが、それ以上の処理がない場合は...最初のdomain / index.php?page =pagenameは「domain/pagename」に301リダイレクトされ、訪問者にこのページが恒久的に移動-(これはURLの古い公開場所であり、これに301を与える必要があります)。次に、「domain / pagename」(新しいパブリックロケーション)などのリクエストは、サイレントに内部的にdomain / index.php?page = pagenameに書き換えられ、検証が行われ、無効な場合は404が指定されます。ただし、キー、?page = pagenameの「page」部分は静的であり、検証でき、.htaccess内から直接404を提供します。これで、domain / index.php?page = crapのようなリクエストは、最初に、有効なdomain / index.php?page = pagenameのように、インデックスに到着したときにのみ、301をうまく提供します。phpはがらくたとして識別できます。したがって、データベースから.htaccess内にページ名を取得する必要があります。
これは、この問題の背景を説明するための.htaccesコンテンツのサンプルです。
ErrorDocument 404 http://localhost/testsite/404.php
RewriteEngine on
RewriteBase /testsite/
## block craprequests without extension like domain/crap > 404
# The requests domain/pagename that do not go to existing pages, will now be redirected with a 302 to index.php?page=pagename and only then give a 404 through the errorcheck in the code.
# This should be done here, with a RewriteCond regex with database content
RewriteCond %{REQUEST_URI} !404.php$
RewriteRule .* 404.php [R=404,L]
## block-direct-queries ##
RewriteCond %{QUERY_STRING} !marker=1$
RewriteCond %{QUERY_STRING} page=(.*)
RewriteRule ^.*$ %1? [R=301,L]
## strip-extensions ##
RewriteCond %{QUERY_STRING} !.
RewriteCond %{REQUEST_URI} !404.php$
RewriteRule ^([\w+%*\d*\+*\-*]+)\.(php[\s]{0,3}|htm[\s]{0,3}|html[\s]{0,3})$ $1 [R=301,L]
## put-querystring
RewriteRule ^([\w\-_]+)\/?$ index.php?page=$1&marker=1 [L]