Mod_rewrite重定向问题

时间:2012-07-13 19:11:15

标签: .htaccess mod-rewrite rewrite

我有这个.htaccess文件:

Options +FollowSymlinks
RewriteEngine On

RewriteRule ^([a-zA-Z0-9_-]+)$ profil.php?user=$1 [NC]
RewriteRule ^([a-zA-Z0-9_-]+)/$ profil.php?user=$1 [NC]
RewriteRule ^([a-zA-Z0-9_-]+)/galerie$ galerie.php?user=$1 [NC]
RewriteRule ^([a-zA-Z0-9_-]+)/galerie/$ galerie.php?user=$1 [NC]
RewriteRule ^(.*)/galerie-(.*)_(.*)$ galerie_poze.php?user=$1&album=$2&page=$3 [NC]
RewriteRule ^(.*)/galerie-(.*)_(.*)/$ galerie_poze.php?user=$1&album=$2&page=$3 [NC]
RewriteRule ^(.*).php?$ index.php?request=$1 [QSA,L]

它似乎没有用。

以下是我的问题:当我想访问我网站上的网页时,例如site.com/test.php, 它重定向到index.php?request=test。问题是我还有“profil.php”和“galerie.php”,我不想通过index.php。相反,当我执行此操作时:site.com/username/profil,我希望它指向profil.php?user=username,但它不起作用。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

我做了这样的事情:

RewriteCond %{REQUEST_URI} !^(.*)\.php?$ 
RewriteRule ^(.*)\.php?$ index.php?request=$1 [QSA,L]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)$ profil.php?user=$1 [NC]
RewriteRule ^([a-zA-Z0-9_-]+)/$ profil.php?user=$1 [NC]
RewriteRule ^([a-zA-Z0-9_-]+)/personal$ personal.php?user=$1 [NC]
RewriteRule ^([a-zA-Z0-9_-]+)/personal/$ personal.php?user=$1 [NC]
RewriteRule ^([a-zA-Z0-9_-]+)/galerie$ galerie.php?user=$1 [NC]
RewriteRule ^([a-zA-Z0-9_-]+)/galerie/$ galerie.php?user=$1 [NC]
RewriteRule ^(.*)/galerie-(.*)_(.*)$ galerie_poze.php?user=$1&album=$2&page=$3 [NC]
RewriteRule ^(.*)/galerie-(.*)_(.*)/$ galerie_poze.php?user=$1&album=$2&page=$3 [NC]

当我做/用户名或/用户名/ profil它工作,但它不再适用于第一个规则ID我做sitename.tld / test.php它不起作用....

答案 1 :(得分:0)

您希望您的两个第一条规则中的一条与[username]/profil匹配(现在它与[username][username]/匹配)

尝试

RewriteRule ^([a-zA-Z0-9_-]+)/profil$ profil.php?user=$1 [NC, L]

答案 2 :(得分:0)

使用条件。

确保文件或目录不存在:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

您还可以使用以下内容限制重定向:

RewriteCond %{REQUEST_URI} !^/profil\.php$ [NC]

确保正确逃脱。 这需要转义:

RewriteRule ^(.*).php?$ index.php?request=$1 [QSA,L]

像:

RewriteRule ^(.*)\.php?$ index.php?request=$1 [QSA,L]

此外,

RewriteRule ^([a-zA-Z0-9_-]+)$ profil.php?user=$1 [NC]
RewriteRule ^([a-zA-Z0-9_-]+)/$ profil.php?user=$1 [NC]

可以简化为:

RewriteRule ^([a-zA-Z0-9_-]+)/?$ profil.php?user=$1 [NC]