mod_rewrite删除查询字符串的名称

时间:2013-09-09 17:30:08

标签: php apache .htaccess mod-rewrite

我的网址存在很大问题。我知道如何删除index.php表单url,但问题是我不知道从url中删除“?act =”。

我的链接现在是 http:// localhost / doctrine / public /?act = test ,我想创建它像 http:// localhost / doctrine / public / test < /强>

我当前 .htaccess文件放在 public 文件夹中:

<IfModule mod_rewrite.c>
        RewriteEngine On

        # Removes index.php from ExpressionEngine URLs
        RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>

我需要帮助如何做到这一点。

2 个答案:

答案 0 :(得分:0)

在表达式引擎规则之前,您可以添加:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /doctrine/public/?act=$1 [L]

要将http: //localhost/doctrine/public/test之类的请求内部重写为/doctrine/public/?act=test。您需要确保内容中的链接看起来像/doctrine/public/test而不是带有查询字符串的链接。如果您的控件之外有链接(例如Google索引页面),您可以添加以下内容:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /doctrine/public/?\?act=([^&\ ]+)
Rewrite Rule ^ /doctrine/public/%1? [L,R=301]

将浏览器指向不带查询字符串的URL。

遗憾的是,这与您的表达式引擎网址不兼容。

答案 1 :(得分:0)

使用此代码:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /doctrine/

    RewriteRule ^(public)/([^/]+)/?$ $1/?act=$2 [L,QSA,NC]

    # Removes index.php from ExpressionEngine URLs
    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>