0

htaccess の rewriterules を使用して、2 つの個別の仮想ディレクトリをファイルにリダイレクトしようとしています。

最初の仮想ディレクトリはadminリダイレクト先であり、リダイレクトする必要がありますadmin.php

http://dev.int/shop/admin>http://dev.int/shop/admin.php/

http://dev.int/shop/admin/>http://dev.int/shop/admin.php/

http://dev.int/shop/admin/products>http://dev.int/shop/admin.php/products

http://dev.int/shop/admin/products/add>http://dev.int/shop/admin.php/products/add

2 番目の仮想ディレクトリはその他のものであり、リダイレクトする必要があります。index.php

http://dev.int/shop/anything>http://dev.int/shop/index.php/anything

http://dev.int/shop/anything/else>http://dev.int/shop/index.php/anything/else

assetsディレクトリと_testファイルrobots.txtsitemap.xmlリダイレクトしてはならないという他の基準もあります。

これは私がこれまでに持っているものですが、機能していません:(

RewriteEngine on
RewriteCond $1 !^(assets|_test)
RewriteCond $1 !^(index\.php|admin\.php|robots\.txt|sitemap\.xml)
RewriteRule ^admin/?(.*)$ /shop/admin.php/$1 [L]
RewriteRule ^(?:admin)/?(.*)$ /shop/index.php/$1 [L]
4

2 に答える 2

1

これを試すことができます:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

# "admin" string is present
RewriteCond %{REQUEST_URI} !(assets|_test|robots\.txt|sitemap\.xml)  [NC]
RewriteCond %{REQUEST_URI}  ^/shop/admin(.*)?/? [NC]
RewriteCond %{REQUEST_URI} !admin\.php          [NC]
RewriteRule .              shop/admin.php%1     [R=301,L]

# "admin" string is NOT present
RewriteCond %{REQUEST_URI} !(assets|_test|robots\.txt|sitemap\.xml|admin)  [NC]
RewriteCond %{REQUEST_URI}  ^/shop(.*)?/?       [NC]
RewriteCond %{REQUEST_URI} !index\.php          [NC]
RewriteRule .              shop/index.php%1     [R=301,L]

adminフォルダーの後に文字列が存在する場合/shop/、永続的にリダイレクトされます。

http://dev.int/shop/admin/any/number/of/folders 末尾のスラッシュの有無にかかわらず。

に:

http://dev.int/shop/admin.php/any/number/of/folders

他の変更を加えずに、パス ストリームで にadmin置き換えます。admin.php


文字列がまったく存在しない場合admin、永久にリダイレクトします:

http://dev.int/shop/any/number/of/folders 末尾のスラッシュの有無にかかわらず。

に:

http://dev.int/shop/index.php/any/number/of/folders

他の変更を加えずに、パス ストリーム内index.phpのフォルダーの後に挿入します。/shop/


着信 URL に以下が含まれている場合、上記のルールは適用されません。

assets_testrobots.txtまたはsitemap.xmlパス ストリーム内。

サイレント マッピングの場合は、 から削除R=301[R=301,L]ます。

于 2013-02-10T00:25:24.200 に答える
0

@faa のサポートとガイダンスに感謝します。以下は実用的な答えです。

RewriteEngine On

# backend
RewriteCond $1 !^(\.php)  [NC]
RewriteRule ^admin(.*)$ /itmanx/shop/draytek/admin.php$1 [R=301,L]

# frontend
RewriteCond $1 !^(index\.php|admin|assets|__test|robots\.txt|sitemap\.xml)  [NC]
RewriteRule ^(.*)$ /itmanx/shop/draytek/index.php/$1 [R=301,L]
于 2013-02-10T09:32:50.920 に答える