2016-05-23 8 views
1

ローカルホストのサブディレクトリにslugを作成しようとしています。.htaccess - "friendly url"(slugs)

search.php

<?php $q = $_GET[ 'q' ]; ?> 

page.php

:私はこれらのコードを有するsearch.phpとpage.phpにおいて

Options +FollowSymLinks -MultiViews 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteBase ^subdirectory/ 

RewriteRule ^subdirectory/search/([a-zA-Z0-9]+)/$ subdirectory/search.php?q=$1 [L,R=301] 
RewriteRule ^subdirectory/page/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/$ subdirectory/page.php?page_name=$1&page_id=$2 [L,R=301] 

私はこの.htaccessのコードを有します

<?php 
    $page_name = $_GET[ 'page_name' ]; 
    $page_id = $_GET[ 'page_id' ]; 
?> 

しかし、いくつかのr eason、それは毎回404のエラーしか出さず、うまくいきませんが親ディレクトリ( "localhost"、 "www")にあります

私はたくさんのグーグルで探せましたが、まだ。

mod_rewrite

はそう

2.4.9はあなたのすべてに感謝(V。2.5)、Apacheサーバを使用してWAMP AllowOverride All

を行い、有効になっています。

+0

設定ファイルに 'mod_rewrite'と' AllowOverride All'を設定しましたか? – Muriano

+0

@ムリアノのアップデート - 私は両方とも有効になっていることを確認しました – natanelg97

+0

あなたは^サブディレクトリの文字列RewriteBaseとRewirteRuleの設定を繰り返しています、これを変更してみてください。 – Muriano

答えて

1

あなたの.htaccessルールにはいくつかの問題があると思います。

まず、RewriteBaseは、すべてのルールで再指定する必要がないようにルートパスを設定することになっています。つまり、RewriteBase /subdirectory/は、実際のRewriteRuleステートメントにsubdirectoryを含める必要はありません。

第2ルールは、/$で終わり、URLに末尾にスラッシュが必要です。オプションにしたり、スキップしたり、後ろにスラッシュを入れずにすべてのURLを書き換える別のルールを設定することができます。

Options +FollowSymLinks -MultiViews 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteBase /subdirectory/ 

RewriteRule ^search/([a-zA-Z0-9]+)/$ search.php?q=$1 [L,R=301] 
RewriteRule ^page/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/$ page.php?page_name=$1&page_id=$2 [L,R=301] 

あなたは/検索/ foobarに/と/ページ/ fooの/バーを使用することができる正規表現を変更せずに/あなたはそれに応じた.htaccessファイルmodificationinでRewriteBaseと相対URLを行った場合、それを動作させるためにPS。実際には.phpファイルパスにユーザーをリダイレクトするため、301も削除することをお勧めします。

+0

それでも404エラーが出ます:\後ろにスラッシュ($記号を取り除いたもの)についても言いましたが、まだ動作していません... – natanelg97

+0

標準のLinux/Apacheで正常に試してみたので、サーバ。 LogLevelを使用してトレースを有効にするには、ここをクリックしてください:http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging –

+0

@ natanel97私の開発サーバーで小さなデモを行いました。永遠に利用できませんが、数日間それを残すでしょう:http://dirtylogic.org/test/ –