我正在尝试使用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
第二个虚拟目录是其他任何内容,应该重定向到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.txt
和sitemap.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]
答案 0 :(得分: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/
,不做任何其他修改。
当传入的网址包含以下内容时,不会应用上述规则:
路径流中的 assets
,_test
,robots.txt
或sitemap.xml
。
对于静默映射,请从R=301
中删除[R=301,L]
。
答案 1 :(得分: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]