.htaccess - 没有index.php的查询字符串

时间:2012-12-03 10:59:17

标签: .htaccess get seo rewrite query-string

我希望我的网址看起来像这样:“http://www.example.com/start”, 而不是这样:“http://www.example.com/index.php/start”。 在我的.htaccess中使用此代码可以正常工作:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1

在一个页面上我必须使用GET-Parameters,网址应如下所示: “http://www.example.com/artists/picasso” 而不是这样的: “http://www.example.com/index.php/artists?artist=picasso” 这也可以使用以下代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /index.php?/$1
RewriteRule ^artists/(.*)$ /index.php/artists?artist=$1 [L]

现在,这个解决方案的问题是,所有其他网址现在都必须以斜杠结束。 所以它必须看起来像这样:“http://www.example.com/start/”,
而不是这样:“http://www.example.com/start”

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

尝试将规则更改为:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !artists/
RewriteRule ^(.*?)/?$ /index.php?/$1
RewriteRule ^artists/(.*)$ /index.php/artists?artist=$1 [L]

主要是,您的模式末尾有/$RewriteRule ^(.*)/$ /index.php?/$1这意味着它必须以斜杠结尾才能匹配模式。将其更改为(.*?)/?$会使其成为可选项。