Htaccess URL重写问题

时间:2009-06-04 18:35:33

标签: .htaccess mod-rewrite

我使用Apache遇到了挑战。

在我的.htaccess文件中,我想转换这样的请求:

URL /组合/ filename.htm

为:

URL?文件名

任何接受者?谢谢你的时间

3 个答案:

答案 0 :(得分:1)

您有几个选择,具体取决于您希望网址对访问者(和搜索引擎)的显示方式。

如果您希望外部可见网址保留url/portfolio/filename.htm,则在删除两条RewriteCond行后,Alec的解决方案才有效。

RewriteEngine On

RewriteRule ^(.*)/portfolio/(.*)\.htm$ $1?$2 [PT,L]

如果查询字符串中可能包含其他参数,并且您希望保留这些参数,请将QSA添加到规则末尾括号中的选项。

如果您希望外面的人看到url?filename,请将规则更改为:

RewriteRule ^(.*)/portfolio/(.*)\.htm$ $1?$2 [L,R]

适用其他查询参数的相同限定条件。

如果这仍然没有帮助,我建议您打开重写日志记录并查看该日志以获取更多线索。将它们发布在这里,有人会帮忙。您可能必须将此部分放在httpd.conf中。我的Apache在.htaccess中不喜欢它。

RewriteLog ...path...
RewriteLogLevel 3  # you'll regret anything higher

答案 1 :(得分:0)

这样的事情应该有用,虽然我还没有测试过。

<IfModule mod_rewrite.c>
RewriteEngine On

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

# Rewrite all other URLs to index.php/URL
RewriteRule ^(.*)/portfolio/(.*)\.htm$ $1?$2 [PT,L]


</IfModule>
<IfModule !mod_rewrite.c>
    ErrorDocument 404 index.php
</IfModule>

答案 2 :(得分:0)

这应该有效:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^portfolio/(.+)\.htm$ index.php?$1 [NC,L]

或者如果你想明显改变它:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^portfolio/(.+)\.htm$ /?$1 [R,NC,L]

第二个看起来像 example.com/?filename 给用户,而第一个看起来像 example.com/portfolio/filename.htm

希望有所帮助。