2013-03-27 131 views
-1

我使用以下.htaccess代码来强制www进入我的网站域名。.htaccess重写网址并获取变量

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

现在,我想我的网址,这是我的变化:

www.mysite.com/index.php?i=something 

www.mysite.com/something 

,但我还是希望有去

www.mysite.com/admin.php的能力(例如)作为单独的页面。

我试着将此代码RewriteRule ^(.*)$ index.php?i=$1 [NC]添加到我的.htaccess文件中,但是当我在/之后键入任何内容时,它将被视为get变量。我该如何解决这个问题?

回答

2

您可以在根目录下的一个.htaccess文件中尝试这样的操作。

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_URI} !index\.php [NC] 
RewriteCond %{REQUEST_URI} !admin\.php [NC] 
RewriteRule ^(.+)/? /index.php?i=$1 [L,NC] 

如果admin.php可以是任何文件,只需更换

RewriteCond %{REQUEST_URI} !admin\.php [NC] 

RewriteCond %{REQUEST_FILENAME} !-f 

重定向到一个404错误处理程序脚本,添加一行像这样的:

ErrorDocument 404 /path/404.php 

This只是一个例子,相应地修改。

+0

你的代码工作,但我有很多其他的网页,如images.php,rss.php,articles.php,等。我需要为它们中的每一个添加这个“RewriteCond%{REQUEST_URI}!images \ .php [NC]”吗?有没有一个通用的代码? – 2013-03-27 10:21:17

+0

修改了我的答案。 – 2013-03-27 10:27:39

+0

它工作,但现在当我键入一个不存在的页面(最后带有.php或.html)时,我得到一个空白页面。我可以重定向到404页面吗? – 2013-03-27 10:30:20

0

尝试......

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ^(.*)/$ /index.php?i=$1 [L] // www.mysite.com/something/ 

OR

RewriteRule ^(.*)$ /index.php?i=$1 [L] // www.mysite.com/something 
0

你必须这样那一定是你重写规则S=1跳过重写规则就是后赎罪看到这个页面了解更多前加赎罪有关此标志的信息http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriteflags

RewriteCond %{REQUEST_URI} ^(.*)/admin\.php$ [NC,OR] 
RewriteRule^admin.php [S=1,L] 
RewriteRule ^(.*)/$ /index.php?i=$1 [NC] 
1

刚刚尝试这一点: -

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