【问题标题】:htaccess doesn't rewrite all the ruleshtaccess 不会重写所有规则
【发布时间】:2016-09-12 22:20:59
【问题描述】:

由于我对 .htaccess 真的很陌生,所以我正在努力了解我使用它的程度。我正在重写一些 url,但问题是,如果我重写 3 个 url,那么顶部的一个是唯一有效的。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^forums/([^/]*)/([^/]*)/$ /forums.php?page=$1&sectionid=$2 [L]
RewriteRule ^forums/([^/]*)/topic/([^/]*)/$ /forums.php?page=$1&topic=$2 [L]

ErrorDocument 400   /error.php
ErrorDocument 401   /error.php
ErrorDocument 403   /error.php
ErrorDocument 404   /error.php
ErrorDocument 500   /error.php

所以,如果我在第一个规则之上添加一个新规则,那将是唯一有效的规则。 我用错了吗?

另外,RewriteCond 是如何工作的?

【问题讨论】:

  • 哪个网址不适合您?

标签: apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

尝试删除 [L] 标志或为每个规则创建单独的 RewriteCond,

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^forums/([^/]*)/([^/]*)/$ /forums.php?page=$1&sectionid=$2

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^forums/([^/]*)/topic/([^/]*)/$ /forums.php?page=$1&topic=$2 [L]

在最后一条规则上使用[L]

【讨论】:

  • 嗨。这没有用。我改写成这样RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^forums/([^/]*)/([^/]*)/$ /forums.php?page=$1&tlocate=$2 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^forums/([^/]*)/([^/]*)/$ /forums.php?page=$1&sectionid=$2 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^forums/([^/]*)/topic/([^/]*)/$ /forums.php?page=$1&topic=$2 [L]
  • 你的规则有矛盾你应用RewriteRule ^forums/([^/]*)/([^/]*)/$ 使用这个条件用于两个不同的参数tlocatesectionid 不能应用于相同的规则你必须创建新的规则来区分这个条件前任。 RewriteRule ^forums/([^/]*)/sectionid/([^/]*)/$ /forums.php?page=$1&sectionid=$2 类似这样的东西。如果可以,请提及。
【解决方案2】:

感谢@Abhishek 的回答,我解决了。

我不得不为每个 url 使用不同的 Rewriterules。所以它们在某种程度上是独一无二的。

【讨论】:

    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多