2

サイトのトップレベルにあるすべての動的URLを変更するmod_rewriteルールを正常に作成しましたが、今度は2番目のレベルのルールを作成する必要があります。後で、2番目の2番目のレベルの書き換えが必要になる可能性があります。 。

現時点で私はこれを持っています

    RewriteEngine on 
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule ^(.+)$ index.php?subj=$1

これは、/ contact / about / eventsなどの他のすべてのページでiutが行うように、/ index.php?subj=homeを/homeに変更するのに役立ちます。

しかし、今はイベントの下にサブページを作成したので、/ events.php?event=event-nameを/event-nameに変更する必要があります。しかし、別のルールを追加すると、サイト全体が台無しになります。私がやろうとしたのはこれです

    RewriteEngine on 
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule ^(.+)$ index.php?subj=$1
    RewriteRule ^(.+)$ event.php?event=$1

しかし、それはうまくいきませんでした。

しかし、それに加えて、index.phpと/(ルート)を/homeにリダイレクトしたい

私が探し回った正しいルールを誰かに教えてもらえますか?しかし、私はそれを正しく理解できないようです。

よろしくお願いします:)

乾杯

更新:これまでのすべての助けに感謝します、iveはすべてを試しましたが、それを正しくすることができないようです。ベンが提案したように、私はURLについてもう少し情報を提供します。現在、サイト全体がサブディレクトリにあり、現在も開発中です。したがって、今のところ、mydomain.com / newwebsite / event.phpevent = 2にありますが、.htaccessファイルは現在開発のルートフォルダにあります。サイトなので、/newwebsiteディレクトリにあります。したがって、私が書き込もうとしているURLはmydomain.com/newwebsite/event/2になります。

「2」と表示されていることに気づきました。これは単にページ/イベントIDです。さらに下の行では、IDではなくタイトルになります。

4

3 に答える 3

2

同じ条件を2回テストしているので、正規表現を区別して固有の機能をテストする必要があります。

私はこれのようにファイルを書き直します:

# Turn on the rewrite engine
RewriteEngine On

# Ignore existing files and directories
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

# Set the general first level rewrites
RewriteRule ^home/?$ index.php?subj=home [NC]
RewriteRule ^event/(.+)$ event.php?event=$1 [NC]

または、次のように階層的に作業することもできます。これは最初の一致を使用します:

# Turn on the rewrite engine
RewriteEngine On

# Ignore existing files and directories
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

# Set all the rewrites
RewriteRule ^event/(.+)$ event.php?event=$1 [L]
RewriteRule ^(.+)$ index.php?subj=$1 [L]
于 2012-11-01T15:31:26.460 に答える
0

これを行う簡単な方法は、/eventNameだけでなく/event/eventNameにリンクすることです。このようにして、ロジックを.htaccessに配置できます。

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^/event/(.+)$ event.php?event=$1 [L]
RewriteRule ^(.+)$ index.php?subj=$1 [L]

ここでの[L]は、一致に達した後に処理を停止する必要があることを示しています。

もう1つの方法は、すべてのリクエストをindex.php?subj =に送信することで、index.phpには、イベントとして処理する必要があるかどうかを判断するロジックがあります(つまり、そのような名前のイベントがあります)。

于 2012-11-01T15:27:04.077 に答える
0

2番目のサンプルには、同じもの(^(。+)$)をキャッチし、2つの異なる場所にリクエストを送信しようとする2つの書き換えルールがあるように見えます。

    RewriteRule **^(.+)$** index.php?subj=$1
    RewriteRule **^(.+)$** event.php?event=$1

ルールを実行するには、それらを区別するために何かが必要です。

    RewriteRule **^home/(.+)$** index.php?subj=$1
    RewriteRule **^events/(.+)$** event.php?event=$1

または、単一のファイル/ページ/ハンドラー(ロジックを処理して正しいコンテンツを提示できるフロントコントローラー)にリクエストを送信する必要があります。

于 2012-11-01T15:27:39.490 に答える