2011-01-24 27 views
1

を削除サブフォルダを削除するには、PHPを削除して、最も基本的なURLを残してください。 また可能であれば、私は 'root.com/ [*]'以外のすべてをroot.comにリダイレクトしたいと思います。 たとえば、「root.com/home/index.php?page=home」と「root.com/sub/test/」はどちらも「root.com」にリダイレクトされます。のmod_rewrite私は私のURLは私が欲しい</p> <p>root.com/sub/?page=home</p> <p> <p></p> TO root.com/home</p> <p>から行くようにしたいサブフォルダとPHP

RewriteEngine On 
#remove subfolder, WORKS 
RewriteCond %{HTTP_HOST} ^root\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.root\.com$ 
RewriteCond %{REQUEST_URI} !^/sub/ 
RewriteRule (.*) /sub/$1 [L] 

これは動作し、サブフォルダ

#remove PHP, not working :S 
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?page=$1 [L] 
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?page=$1 [L] 

を削除しかし、これは作業と 'を残していない。

の.htaccessとmod_rewriteのは、これまでのところ、私はこれを持って最善の方法 のようです?page = home 'ect 私は2番目のルールの正規表現の前に何かが見つからないと思いますが、これは新しいものです。

ありがとうございます!

EDIT:[L]のことを考慮に入れて、まだダイスはありません。

私は、1回のヒットではなく、別々の繰り返しで行う必要があると推測しています。

+0

私は自分のコンピュータからそれをサイトを表示したときに、バンプ/私は、別の問題を発見しました(最初の部分)は「www.root.com/page」と表示されていますが、私の仲間のコンピュータでは「www.root.com/sub/page」として表示されます。 – Neros

答えて

0

mod_writeの問題は通常競合にあります。この場合、2番目のブロックは1番目のブロックの後に追加され、無限ループまたは500のエラーを生成します。

RewriteRuleにフラグ[L]を追加する必要があります。例えば。 [L]なし

RewriteEngine On 
#remove subfolder 
RewriteCond %{HTTP_HOST} ^root\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.root\.com$ 
RewriteCond %{REQUEST_URI} !^/sub/ 
RewriteRule (.*) /sub/$1 [L] 

#remove PHP 
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?page=$1 [L] 
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?page=$1 [L] 

/abc/index.php?page=abcに書き換えされ、それが/sub//index.php?page=abcに書き換えます。

私はこれが問題だと確信していますが、テストされていないので、私はそれに賭けるつもりはありません。しかし、決して傷つけないでください。

+0

私はそれを行ったが、私はまだ "www.root.com/?page=home"のようなURLを取得するので、サブフォルダは消えてしまったが、PHPはまだ周囲にある – Neros

0

このルールは私が考える問題である:それを変更してみてください

RewriteRule (.*) /sub/$1 [L]

RewriteRule (.*) /sub/index.php?page=$1 [L]

+0

これを(他のバリエーションの中でも)それは働く:S – Neros

関連する問題

 関連する問題