2016-04-30 7 views
5

バウンティノート:add_rewrite_rulesを使用して自分の解決策を見つけました。私は賞金をApacheのRewriteRules形式で同じソリューションを提供できる人に報います。取得文字列をスラッグに変換するには?

私はHow can I create friendly URLs with .htaccess?を読んだことがありますが、それはまだ難しく、複雑です。

私はWordPress Multisiteを実行しています。サブドメインのWebサイトcp.example.comを持っており、このサブドメインにPHPアプリケーションを作成しています。

私はあるウェブサイトのアドレスを持っているが、このようになります:

http://cp.example.com/sales/12345/userid/123456/83hkuhdqhuhd873xsuhdqwiuhdiq 

そして、私はその意志を行うためにあたかも:

http://cp.example.com/sales.php?id=12345&userid=123456&uid=83hkuhdqhuhd873xsuhdqwiuhdiq 

を介して、それが可能私は、ユーザーのアクセスウェブサイトをできるようにするためにですPHPはまだ値に$_GETを行うことができるでしょうか?

たとえば$_GET['id'],$_GET['userid']および$_GET['uid']

私のベースにはWordPressを使用していますが、別のテーブルを使用してアプリケーションの終了を書いています。

私は上記の目的を達成するためにカスタムポストタイプを使用しないようにしています。

私は以下を試しました。

  1. 私は、MySQLから情報を取得するために$_GET['id']$_GET['userid']$_GET['uid']が必要になりますview_sales.phpにテンプレートファイルview_sales.phpを作成します。

  2. view_sales.phpまた、別のヘッダーファイルを使用しましたが、get_header('sales')です。

  3. in header-sales.php上記のスタックオーバーフローページから取得した次のコードを追加しました。

    $path_components = explode('/', $_GET['url']); 
    $id=$path_components[0]; 
    $userid=$path_components[1]; 
    $uid=$path_components[2]; 
    
  4. それはマルチサイトですので、私は私の/public_html/example.comドメインに1つの.htacessウェブサイトを持っているウェブサイトは、 http://cp.example.com/sales/?id=123456&userid=123456&token=98917397219372iheu1i

  5. ある今ので、私はので、私は上記のコードは提案追加スラグの販売と新しいWPのページを作成しました私の.htaccessになりました。

    RewriteEngine On 
    RewriteBase/
    RewriteRule ^index\.php$ - [L] 
    
    # add a trailing slash to /wp-admin 
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] 
    
    RewriteCond %{REQUEST_FILENAME} -f [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule^- [L] 
    RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] 
    RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] 
    RewriteRule . index.php [L] 
    
    <IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
    </IfModule> 
    

何もまだ醜いURLにリダイレクトする、現時点では作業していません。

編集:

私は上記のすべての異なるバリエーションを試みたが、何も動作以下

RewriteCond %{HTTP_HOST} !^cp\.example\.com [NC] 
RewriteRule ^listing/([a-z0-9]+)$ listing/?action=$1 [L,NC] 
RewriteRule ^view/([a-z9-9]+)$ view/?id=$ [L,NC] 

を試してみました。

私は

function pa_custom_rules() { 
    add_rewrite_rule('^/listing/([^/]+)/$', 'index.php?pagename=listing&action=$matches[1]', 'top'); 
} 
add_action('init', 'pa_custom_rules'); 

が書き換え配列を印刷し、私は新しいルール

 [^/listing/([^/]+)/$] => index.php?pagename=listing&action=$matches[1] 

客員index.phpの作品が、行くのを見ることができます試してみましたadd_rewrite_rule方法へ/リスト/テスト用に編集/失敗する。 404エラーを返します。

答えて

1

最後に、数日間私を悩ました問題を解決しました。

表示される特定のドメインの書き換えルールが機能しません。

あなたは

のhttpを変更したい場合:// サブドメイン .example.comと/リスト? アクション=(例えばまたはDELまたはVIEW)を追加

Wordpressのマルチサイトの

へのhttp:// サブドメイン .example.comと/ 追加/(egor DELまたはVIEW)

書き換えルールを追加するだけでなくタグを書き換えたり、タグをquery_varに追加することも義務付けられています。

機能を追加するには、次の機能を追加するか、プラグインを作成して一度起動する必要があります。

function pa_custom_rules() { 
    add_rewrite_rule('listing/(.*)$', 'index.php?pagename=listing&action=$matches[1]', 'top'); 
    add_rewrite_tag('%action%', '(.*)'); 
} 
add_action('init', 'pa_custom_rules'); 

はかつてあなたがHTTPにアクセスすることができます行わ:// サブドメイン。実施例。com/listing/ add

あなたのページ(この場合、私のページ名は 'listing')では404エラーが発生せず、 "action"(この場合はAdd /デル/ビュー)

http://subdomain.example.com/listing/**add** 
    $a = get_query_var('action'); 
    echo $a; //prints **add** 

注意を使用して:あなたははどのようにするRewriteRule作品のように$ _GETを使用して行動の値を取得することはできませんが、これはほとんどのものを成し遂げることができるはずです。

私はwordpressで作業を続け、私のカスタマイズした美しいリンクをすべて手に入れて、LaravelとSymfony3を探索する最後の3日間の仕事を捨てることができます。ああ、助かった。

0

私は私が

 http://cp.example.com/sales/12345/userid/123456/83hkuhdqhuhd873xsuhdqwiuhdiq

はい、その可能な、例えば経由してユーザのアクセスにウェブサイトを聞かせすることが可能です。この

 http://cp.example.com/sales.php?id=12345&userid=123456&uid=83hkuhdqhuhd873xsuhdqwiuhdiq

のようであるウェブサイトを持っている:

RewriteEngine On 
RewriteRule ^sales/(\d+)/userid/(\d+)/([a-z0-8]+)$ sales.php?id=$1&userid=$2&uid=$3 [L,NC] 

もし私がそれをやろうとすれば、PHPはまだ の値で$ _GETできますか?

例えば$ _GET [ 'ID']、$ _GET [ 'ユーザーID']と$ _GET [ 'uidの']

はい、もちろんPHPはそれを行うことができるようになります。

+0

それはWordPressのマルチサイトを破るでしょうか? –

+0

@Dave Teu残念ながら私は知らない。それはwordpressが現在のサイトの名前をどのように決定するかによって異なります。 – Eugeny

+0

私はRewritecondについて他のサイトから読みましたので、次のRewriteCond%{HTTP_HOST}を追加しました!^ cp。[NC] RewriteCond%{HTTP_HOST}^example.com $ [NC] RewriteRule^listing /([a-z0-9] +)$ listing /?action = $ 1 [L、NC]しかし、それは私に404エラーを与え続けます –

関連する問題