0

Perch を使用して小さな CMS ソリューションを開発しています。現在、ローカル開発マシンの WampServer で実行されています。

Perch はすぐに使いやすい URL を提供しないため、/perch ディレクトリが変更されないようにしながら、これを実装したいと考えました。

これまでのところ、書き換え部分が機能しています。つまり、/blog.php のリクエストは /blog に 301 され、/blog は以下のルールを使用して /blog.php に書き換えられます。

Options +FollowSymLinks -MultiViews

RewriteEngine On

# Rewrites domiain.com/file to domain.com/file.php
RewriteCond %{REQUEST_URI} !^/perch
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php 

# Redirects domain.com/file.php to domain.com/file
RewriteCond %{REQUEST_URI} !^/perch
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{REQUEST_URI} ^(.+)\.php$
RewriteRule (.*)\.php$ /$1 [R=301,L]

ただし、HTML 出力にはまだ .php 拡張子が残っています。.htaccess ファイルに以下を追加してみました:

AddOutputFilterByType SUBSTITUTE text/html
#Replace all .php extensions
Substitute s|.php||ni
#Original blog pattern /blog/post.php?s=2014-11-18-my-first-blog-post
Substitute s|blog/post\?s=(\w+)|blog/$1|i

ただし、これはグローバルに適用されます。つまり、/perch フォルダー内のリンクにも適用されます。/perch フォルダー以外のすべてに適用する条件を追加する方法が見つかりませんでした。そのような方法はありますか?

ProxyPass/ProxyReversePass のドキュメントも見ましたが、ページ上の HTML を置き換えるだけではやり過ぎのようです。

どんな助けでも大歓迎です。

よろしく、 dotdev

4

1 に答える 1

3

www.grabaperch.com の Perch CMS について話しているのですか?

すべてがここにあります: http://docs.grabaperch.com/video/v/simple-url-rewriting/

ただし、HTML 出力にはまだ .php 拡張子が残っています。

.htaccess / mod_rewrite は、HTML 出力に対して何もしません。

RewriteRules は、メール (URL) を対象のメールボックス (実際のファイル) に配信する郵便配達員と考えてください。

あなたがすることは.php、マークアップ (HTML 出力) の拡張子を「手動で」省略することです。

  • perch_pages_navigation()では、 hide-extensionstrueに設定する必要があります
  • 手動で追加する URL: .php なしで記述するだけです

いずれにせよ、これらのアドレスを .php ファイルにルーティングするように郵便配達員に指示する必要があります。それが、これらの RewriteRules の目的です。したがって、.htaccess はサフィックスを削除しません.php。逆に、サフィックスを追加します。

Perch (または任意の "remove .php" ユース ケース) + Perch ブログの基本的な .htaccess (public_html ディレクトリに移動) は次のとおりです。いくつかの説明を追加しました:

# make sure the address we received (e.g. /mypage) is not an existing file      
RewriteCond %{REQUEST_FILENAME} !-f
#  make sure it's not an existing directory either
RewriteCond %{REQUEST_FILENAME} !-d
# make sure there IS an existing .php file corresponding to it
RewriteCond %{REQUEST_FILENAME}.php -f
# if the address starts with "blog/", pick what comes afterwards, put it into the GET Parameter and quit (that's the [L]) 
RewriteRule ^blog/([a-zA-Z0-9-/]+)$ /blog/post.php?s=$1 [L]
# if the first conditions are ok, but it wasn't a blog post (else we would have quit), just append .php to it. Ah, and keep other get params (that's the QSA=Query String Append). 
RewriteRule ^(.+)$ $1.php [L,QSA]

より洗練された可能性については、たとえばここから始めることができます: https://github.com/PerchCMS/perchdemo-swift/blob/master/public_html/.htaccess

これは、 の CMS の機能にはまったく影響しません/perch/

于 2014-11-19T19:02:22.893 に答える