2016-12-27 141 views
0

我对规则有一点理解问题。它应该工作,但我认为我错过了一些东西。帮助是Appriciated :)restfull htaccess重写条件不适用geting

规则:

<IfModule mod_rewrite.c> 
    Options -MultiViews 
    RewriteEngine On 
    RewriteCond %{REQUEST_URI}$1 ^(.*?/)(.*)\2$ 
    RewriteRule ^(.*)$ - [E=BASE:%1] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule %{ENV:BASE}^(.+)/(\w+?)/(\w+?)$  %{ENV:BASE}handler.php?path=$1&class=$2&method=$3 [L,QSA] 

</IfModule> 

它shold转换这个网址:

http://sccatdev.office.dig/deploy/ajax/Approval/Article/test

http://sccatdev.office.dig/deploy/ajax/handler.php?path=Approval&class=Artile&method=test连同职位和获得。

但它semms即时消失的东西。 .htaccess位于ajax文件夹中。

回答

0

有几个问题:

  1. %{ENV:BASE}作为一个环境变量不能重写模式
  2. RewriteRule模式匹配URI相对于当前目录,而不是完整的路径匹配使用。

如果.htaccess位于ajax文件夹内,那么你甚至不需要%{ENV:BASE}变量来改写。只需使用以下.htaccess:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ handler.php?path=$1&class=$2&method=$3 [L,QSA] 
+0

谢谢你wery很多的指针。 但是你的规则不会被触发。它位于ajax文件夹中。 – Sangoku

+0

通过在你的'.htaccess'之上放置一些垃圾(随机)文本,并确定当你在浏览器中访问你的页面时,它是否会产生500(内部服务器)错误,从而验证你的'.htaccess'是否被启用。 500错误意味着.htaccess已启用。 – anubhava

+0

是的,它已启用。现在我正在采取一种解决方法。 – Sangoku