RewriteRule不工作.htaccess

时间:2017-03-24 22:52:57

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

所以我有这个.htaccess:

RewriteEngine On
RewriteRule ^([^/]*)/$ /brand.php?brand=$1 [L]

的index.php

<a href="/brand.php?brand=audi">audi</a>

brand.php

<?php
    if(isset($_GET['brand'])) {
        echo "brand is ".$_GET['brand'];
    } else {
        echo "no brand selected";
    }
?>

根据http://www.generateit.net/mod-rewrite/index.php它应该有效。

点击该链接后,您的网址将显示为domain/brand.php?brand=audi。但我希望它看起来像domain/audi/。它工作得很好,所以我想。但是当你输入domain / asdvasdvasdvkasdv /时,它只会说:品牌是asdvasdvasdvkasdv 而不是没有品牌选择,因为brand.php上从未有过品牌。< / p>

使用mysql版本10.1.22-MariaDB

在Linux上运行的Apache

3 个答案:

答案 0 :(得分:1)

您的rewriteRule仅将 / bradname / 映射到旧网址 /brand.php?brand=brandname 。要将旧网址重定向到新网址,您需要一个aditional rewriteRule。在现有的RewriteRule

之前添加以下内容
RewriteEngine on


#1)old to new uri handler


RewriteCond %{THE_REQUEST} /brand\.php\?brand=([^\s]+) [NC]
RewriteRule ^ /%1/? [L,R]
#2)Your new to old uri handler

这会将 /brand.php?brand=brandname 从外部重定向到 / brandname /

答案 1 :(得分:0)

这个怎么样?

RewriteRule path/brand.php?brand=(.*)/ path/$1/

答案 2 :(得分:0)

固定

有几种方法可以解决这个问题,但我认为这是最好的方法:

的.htaccess

RewriteEngine On
RewriteRule ^brand/([^/]*)/$ /brand.php?brand=$1 [L]

HTML

<a href="/brand/audi/">audi</a>

您需要链接到代表brand.php的子目录/brand/。在brand.php中,您只需检查品牌的价值是否在数据库中。

您需要链接到/ brand / brandname /才能获得brand.php。如果您使用/brand.php?brand=brandame作为链接,则不会重写该网址。