1

これは私の.htaccessファイルです:

RewriteEngine on

RewriteBase /admin

RewriteRule menu/([0-9]+)/([0-9]+)/([a-z0-9]+) http://www.mysite.com/admin/index.php?m=$1&o=$2&token=$3 [R,L]

完全なURLを含める必要がありました。これがないと、http://www.mysite.com/menu/1/1/login.php代わりににリダイレクトされ続けたためです。mysite.com/admin/login.php

そこで、リンクを書き直して、次のようにしました。

<a href="/admin/menu/1/1/bl4h1234">Some link</a>

これは問題なく機能しますが、URLはアドレスバーに醜いURLとして表示されますが、全体の目的はURLをきれいなURLとして表示することでした:/

どうすれば修正できますか?

4

3 に答える 3

1

mod_rewriteルールと書き換えを処理する別の(&標準[MVC /フロントコントローラーパターン])方法は、URL全体をindex.phpに渡して、そこで処理することです。

実際には、長期的には簡単になります。そうしないと、機能を追加するときに問題の複雑さが増すだけです。

それぞれにindex.phpが含まれるフォルダー(menu|admin)を使用しているように見えるため、ルータースクリプトの種類はありません。したがって、で基本ルートを処理する必要があります。基本的には、フォルダごとに書き直す必要があります。.htaccess

.htaccessはあなたのルートに入ります。それ以外の場合は、RewriteBase / pathを使用せずに、フォルダーごとに書き直す必要があります。

ディレクトリ構造(ルート内の.htaccessを配置する場所):

ROOT>/
     /index.php
     /.htaccess
     /admin/
           /index.php
     /menu/
          /index.php
     /someOtherFolder/
                     /index.php
                     /somefile.php

.htaccessの書き換え

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^admin/menu/(.*)$ admin/index.php?route=$1 [L,QSA]
RewriteRule ^menu/(.*)$ index.php?route=$1 [L,QSA]

次に、index.phpファイル内で、$_GET['route']パラメータを次のように展開してルートを処理します。/

<?php 
if(isset($_GET['route'])){
    $url = explode('/',$_GET['route']);
    //Assign your variables, or whatever you name them
    $m     = $url[0];
    $o     = $url[1];
    $token = $url[2];
}else{
    $m     = null;
    $o     = null;
    $token = null;
}
?>

それが役に立てば幸い。

于 2012-04-29T15:47:47.637 に答える
1

を介して新しいURLにリダイレクトしています[R]。代わりに、プロトコルとドメインをリライトから削除して、を失います[R]。これにより、内部書き換えが実行されます。

RewriteRule menu/([0-9]+)/([0-9]+)/([a-z0-9]+) index.php?m=$1&o=$2&token=$3 [L]
于 2012-04-29T12:41:25.233 に答える
0
  1. 絶対URLへの書き換えを作成しないでください。書き換えられたURLからプロトコルとホスト名を削除します。
  2. リダイレクトが必要ない場合は、Rフラグを使用しないでください。
于 2012-04-29T12:41:22.280 に答える