为什么我的网站的网址有?已经改变了.htaccess

时间:2014-03-13 15:42:45

标签: regex apache .htaccess mod-rewrite expressionengine

我使用ExpressionEngine作为我网站的CMS。我用以下内容创建了一个.htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # Removes index.php from ExpressionEngine URLs
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteCond %{REQUEST_URI} !/system/.* [NC]
    RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

    # Directs all EE web requests through the site index file
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
    RewriteCond %{HTTP_HOST} ^www.gsmastersinc.com$ [NC]
    RewriteRule ^(.*)$ http://gsmastersinc.com/$1 [R=301,L]
</IfModule>

为什么我网站的所有网址都有?在他们中?防爆。 myurl /?/接触。

你可以在这里看到我在说什么:http://gsmastersinc.com,然后点击任何导航链接。悬停时,只有在点击后才会显示?。

我必须拥有?在第13行的/index.php之后,或者链接被破坏,我得到了404.

我整个上午一直在寻找答案,但所有出现的内容都与.NET或类似内容有关。

由于

1 个答案:

答案 0 :(得分:1)

更改规则的顺序:

RewriteEngine On
RewriteBase /

RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{HTTP_HOST} ^www.gsmastersinc.com$ [NC]
RewriteRule ^(.*)$ http://gsmastersinc.com/$1 [R=301,L]
# Removes index.php from ExpressionEngine URLs
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{REQUEST_URI} !/system/.* [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

通常在内部重写规则之前保留301规则。