0

我正在尝试让 Apache 2.2 mod_rewrite 获得干净的 url。我有链接,例如

<ul>
<li><a href="index.php?view=pageName">Page Name</a></li>
<li><a href="index.php?view=pageName2">Page Name2</a></li>
<li><a href="index.php?view=pageName3">Page Name3</a></li>
</ul>

和 url 出来是

http://example.com/user/index.php?view=pageName

我想将地址栏中的 url 清理为这个

http://example.com/user/pageName

编辑:如果有任何用处,这就是我的 httpd.conf 中的内容。

<Directory "C:/Apache2.2/htdocs/user">
    Options Indexes FollowSymLinks
    AllowOverride all
    order allow,deny
    Allow from all
</Directory>

使用 phpinfo() 我已经验证了 mod_rewrite 已加载,并且我在我的 .htaccess (用户文件,不是 root .htaccess)中有这个,而不是 apache 上的虚拟用户

RewriteEngine on
RewriteBase /user/ #Edited rewrite base added in, but not helping much.
RewriteOptions Inherit
RewriteRule ^/user/([a-zA-Z])/?$ index.php?view=$1  [NC,L] 

编辑:我的 .htaccess 的其余部分

#Ensure browser reads Header
Header unset ETag
FileETag None
Header unset Last-Modified

#Set caching expires
Header set Expires On
ExpiresDefault "access plus 30 days"

#gzip
<FilesMatch "\.(js|css)$">
SetOutputFilter DEFLATE
</FilesMatch>

在 html 结构中相同且无法正常工作的所有菜单链接上,它们的工作方式不同。IE:它将我发送到http://example.com/user/?view=pageName,但正在加载根 HTML 文件内容。

如果我改变这条线

RewriteRule ^/user/([a-zA-Z])/?$ index.php?view=$1  [NC,L]

RewriteRule ^index\.php$ http://www.google.com  [NC,L]

我按预期被发送到谷歌。所以很明显我在匹配和替换方面做错了什么,但我做错了什么?提前致谢。

编辑: access.log 和 error.log 没有错误。

4

3 回答 3

3
RewriteRule ^/user/([a-zA-Z]+)?$ index.php?view=$1  [NC,L]

你错过了 + 所以你不匹配单词,只是一个字符

于 2011-06-02T09:16:13.293 回答
2
RewriteRule ^/user/([a-zA-Z])?$ index.php?view=$1  [NC,L] 

试试这个..(删除一个斜线)

于 2011-06-02T04:33:54.870 回答
0

已修复:必须更改 HTML URL 样式才能使用

<a href="pageName">Page Name</a>

然后在.htaccess

RewriteEngine On
RewriteOptions Inherit
ReWriteBase /user/
RewriteRule ^([a-zA-Z0-9]+)/?$ index.php?view=$1 [QSA,L]

还必须从 apache 的 httpd.conf 中禁用 mod_cache.so,因为如果留下任何缓存,它会干扰重写。希望这可以帮助其他人获得干净的网址。

于 2011-06-03T00:05:17.663 回答