我有一个用户注册的页面,他们会重定向到他们的个人资料。他们的个人资料网址是:example.com/profiles/?username=sam,其中sam可以是任何名称。这很成功,但我试图让URL更干净。我想让URL看起来像这样:example.com/profiles/sam这里是我的.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteCond %{THE_REQUEST} /profiles/?\?username=([^&\s]+) [NC]
RewriteRule ^ /profiles/%1? [L,R]
RewriteRule ^(?:profiles/)?([0-9]+)/?$ /profiles/?username=$1 [L]
SetOutputFilter DEFLATE
<IfModule mod_setenvif.c>
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>
<IfModule mod_headers.c>
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</IfModule>
</IfModule>
example.com/profiles/中的个人资料是一个目录。 inside profiles是一个index.php文件,这是创建动态页面的PHP文件。我的.htaccess文件位于根文件夹中。我也在使用GoDaddy。 GoDaddy声明:&#34;因为启用mod_rewrite是在全局级别处理的,所以您不需要在httpd.conf文件中启用它。您只需要将所需的代码添加到.htaccess文件的正文中。包含重写规则的.htaccess文件必须与目标文件位于同一目录中。&#34;
使用我的.htaccess,它将URL从example.com/profiles/?username=sam更改为example.com/profiles/sam,但根本不显示配置文件,而是显示404错误页面,意味着页面不存在。该页面应该存在。此外,添加选项+多视图会产生相同的404错误。使用Options + Multiviews,一些页面显示CSS而不是PHP页面。
如何才能将example.com/profiles/?username=sam重定向到example.com/profiles/sam并使个人资料页面实际显示?
答案 0 :(得分:1)
在/profile/.htaccess
:
RewriteEngine On
RewriteBase /profiles/
RewriteCond %{THE_REQUEST} /\?username=([^&\s]+) [NC]
RewriteRule ^ %1? [L,R=302]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?username=$1 [L,QSA]
[0-9]+
之后与/profile/
匹配,后者与sam
不匹配。.php
,您应先检查它的存在。