我使用Apache遇到了挑战。
在我的.htaccess文件中,我想转换这样的请求:
URL /组合/ filename.htm
为:
URL?文件名
任何接受者?谢谢你的时间
答案 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 。
希望有所帮助。