0

私は現在、単純な CMS の構築に取り組んでおり、特定のスラッグ (/setup や /admin など) をそれぞれのページに書き換え、htaccess が残りのすべてのリクエストをサービス ページに書き換えられるようにしたいと考えています。

これが私の .htaccess にあるものです。

Options +FollowSymlinks -MultiViews
RewriteEngine on
#RewriteBase /

# Rewrite the setup slug to the setup page
RewriteCond %{REQUEST_URI} ^/setup$
RewriteRule ^/setup$ /setup.php [L,R=301]

# Rewrite all other URL's to the keyhole that translates them
RewriteRule ^(.*)$ keyhole.php?slug=$1 [L,QSA]

現在、リダイレクトは他のすべての URL で機能します。それぞれをキャプチャし、keyhole.php に送信します。ただし、アクセスしようとすると、http://localhost/basic-cms/setupにリダイレクトされhttp://localhost/var/www/basic-cms/setup.phpます。

また、変だと思ったのは、 に行こうとするとhttp://localhost/basic-cms/setup.php、 に連れて行かれhttp://localhost/setup.phpます。

また、RewriteBase のコメントを外すと、まだ同じ問題が発生し、他の包括的な書き換え行が壊れます。

編集:

与えられた回答から提供された情報を取得し、新しい .htaccess ファイルを作成しました。

Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteBase /

# Rewrite the setup slug to the setup page
RewriteCond %{REQUEST_URI} ^setup$
RewriteRule ^setup$ setup.php [L]

# Rewrite all URL's to the keyhole that translates them
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ basic-cms/keyhole.php?slug=$1 [L,QSA]

ただし、セットアップリダイレクトから奇妙なリダイレクトが発生することはなくなりましたが、setup.php へのセットアップはまだ行われていないようです。^setup$ をチェックする RewriteCond をスキップしたかのように動作します。新しく確立した RewriteBase と何か関係があるのだろうか...

最終編集:

さて、もう少し噛んでみると、どこが間違っていたのかがわかりました。式に RewriteBase を追加したため、私が台無しにしたのはこの状態でした。記録のために、setup.php に直接移動する setup slug を除いて、すべての slug を keyhole.php にリダイレクトできるようにする作業中の .htaccess を次に示します。

Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteBase /

# Rewrite the setup slug to the setup page
RewriteCond %{REQUEST_URI} ^/basic-cms/setup$
RewriteRule ^(.*)$ basic-cms/setup.php [L]

# Rewrite all URL's to the keyhole that translates them
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ basic-cms/keyhole.php?slug=$1 [L,QSA]

明らかに、私はローカルの Apache インスタンス上に構築しており、仮想ホストをセットアップしていないため、この htaccess ファイルは、実際の URL に移動すると少しトリミングされるため、「基本的な」 -cms" パスの部分。これは、そのディレクトリが必然的にライブ Web サーバーのルート ディレクトリになるためです。

4

1 に答える 1