htaccess重写规则没有斜线

时间:2015-04-14 18:26:55

标签: .htaccess mod-rewrite

我正在尝试和谷歌搜索几个小时,无法找到解决我的问题的方法。我想改写:

domain.com/profile.php?user=abc> domain.com/abc

我用:

RewriteRule ^(.*)/$ /profile.php?user=$1 [L]

最后只能使用斜杠。如果我尝试没有斜线

RewriteRule ^(.*)$ /profile.php?user=$1 [L]

我收到内部服务器错误!

完成.htaccess

ErrorDocument 404 /errors/404.php
ErrorDocument 500 /errors/500.php
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !\.(css|jpg|gif|png|jar|js|html|htm|php)$
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]
RewriteRule ^share/([^/]*)/$ /share/share.php?id=$1 [L]
RewriteRule ^(.*)/$ /profile.php?user=$1 [L]
<IfModule mod_deflate.c>
<FilesMatch "\.(html|php|txt|xml|js|css|svg)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE\s7 !no-gzip !gzip-only-text/html

Someboy知道我做错了什么?

谢谢, 科内尔

1 个答案:

答案 0 :(得分:0)

第二次尝试时,你会得到500,因为你创造了一个无限循环:
^(.*)$会一次又一次地匹配profile.php?user=xxx ...当您尝试^(.*)/$时不是这种情况,因为(没有尾随斜线)这与profile.php?user=xxx不匹配

相反,你可以这样做

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !\.(css|jpg|gif|png|jar|js|html|htm|php)$
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]

RewriteRule ^share/([^/]*)/$ /share/share.php?id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/?$ /profile.php?user=$1 [L]