Apache .htaccess 文件未正确重写

Apache .htaccess file not rewriting properly

我有一个 .htaccess 文件。它需要在两种情况下重写 URL:对于 MVC 框架和在更特殊的情况下。如果用户没有名为 "cfnw-hash" 的 cookie,我想将所有请求重写为“/resources/newspaper”。我试过将代码放在 MVC 代码之前和之后。不起作用。它在切换到 MVC 框架之前工作,但我真的没有足够的 .htaccess 知识来查看是否是这导致了问题。这是代码:

Options -Indexes

<IfModule mod_rewrite.c>
    Options -Indexes

    RewriteEngine On
    RewriteBase /

    # Force to exclude the trailing slash
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.*)/$
    RewriteRule ^(.+)/$  [R=307,L]

    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ index.php? [QSA,L]
</IfModule>

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !cfnw-hash [NC]
RewriteRule \/resources\/newspaper.* http://www.example.com/error/401 [R=401,NC,L]

这样说:

<IfModule mod_rewrite.c>
    Options -Indexes

    RewriteEngine On
    RewriteBase /

    RewriteCond %{HTTP_COOKIE} !cfnw-hash [NC]
    RewriteRule ^resources/newspaper /error/401 [R=401,NC,L]    

    # Force to exclude the trailing slash
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.*)/$
    RewriteRule ^(.+)/$  [R=307,L]

    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d    
    RewriteRule ^(.*)$ index.php? [QSA,L]
</IfModule>

清除浏览器缓存后进行测试。

结合您的规则,我认为您的 RewriteRule 可能不匹配,因为前置 / 以及 cookie 匹配。试试这个。请注意您使用 cookie 更新的 cookie 部分。

Options -Indexes

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /

    RewriteCond %{HTTP_COOKIE}  !cookie_name=specific_value; [NC]
    RewriteRule ^resources/newspaper/?(.*) http://www.example.com/error/401 [R=401,NC,L]

    # Force to exclude the trailing slash
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.*)/$
    RewriteRule ^(.+)/$  [R=307,L]

    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ index.php? [QSA,L]
</IfModule>