【发布时间】:2013-10-04 23:03:29
【问题描述】:
如何通过 .htaccess 重写 url,使 url 以:
_slides.html
可以通过
访问?slides
服务器上的典型 url 如下所示:
website.com/directory1/_slides.html
【问题讨论】:
标签: regex apache .htaccess mod-rewrite url-rewriting
如何通过 .htaccess 重写 url,使 url 以:
_slides.html
可以通过
访问?slides
服务器上的典型 url 如下所示:
website.com/directory1/_slides.html
【问题讨论】:
标签: regex apache .htaccess mod-rewrite url-rewriting
您的意思是要将 "/$any/_slides.html" 重写为 "/$any/?slides" 吗?那么请试试这个:
RewriteEngine on
RewriteRule ^/?([^/]+)/_slides.html$ /$1/?slides [L]
还是相反?像这样(因为我对你的问题感到困惑):
RewriteEngine on
RewriteRule ^/?([^/]+)/\?slides$ /$1/_slides.html [L]
最后一次尝试
现在我知道你想查看 "/$any/?slides" 和 "/$any/slides_html" 的内容,现在尝试确保您的 .htaccess 文件位于您的域的根目录中并尝试以下操作:
RewriteEngine on
RewriteCond %{QUERY_STRING} ^slides$
RewriteRule ^/?([^/]+)/$ /$1/_slides.html [L]
如果这些指令不起作用,则无法重写带有查询字符串的动态目录。
【讨论】:
尝试将此添加到文档根目录中的 htaccess 文件中:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^([^=]+)$
RewriteRule ^([^/])*/$ /$1/_%1.html [L]
这应该接受像http://website.com/directory1/?slides 这样的请求,并在/directory1/_slides.html 提供内容。
要重定向对_文件的直接访问,您还可以添加:
RewriteCond %{THE_REQUEST} \ /([^/]*)/_([^.\ \?]+)\.html(\ |$)
RewriteRule ^ /%1/?%2 [L,R=301]
【讨论】:
/t/ 是从那里来的。当我在一个空白的 htaccess 文件中测试这些规则时,我显然会被路由到 /directory1/_slides.html。
?,但我认为这与您的问题无关