http.conf 将 example.com/foo/bar 重定向到 example.com/foo?id=bar

Posted

技术标签:

【中文标题】http.conf 将 example.com/foo/bar 重定向到 example.com/foo?id=bar【英文标题】:http.conf redirect example.com/foo/bar to example.com/foo?id=bar 【发布时间】:2011-11-14 13:15:51 【问题描述】:

我正在尝试创建一个动态页面,其内容由传递给它的变量确定,但我希望 url 很好。基本上我想在目录 /foo 中有一个处理任何条的单个索引文件。 example.com/foo/bar 到 example.com/foo?id=bar

我已经尝试了我在 httpd.conf 文件中能想到的一切。我最近的尝试是:

RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^/foo/([a-z-]*) /foo/index.php?id=$1 [QSA,L]

但是,当我尝试加载 example.com/foo/bar 时,加载的页面是 example.com

非常感谢任何帮助!

编辑:当我访问 example.com/foo/bar 时,它仍在加载 example.com/index.php 也许我的其他规则之一正在干扰?

AllowOverride none
Options +FollowSymLinks
RewriteEngine on

RewriteRule ^(.*)\.html$ http://www.example.com/$1.php [R=301]

RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^/foo/([a-z-]*)(\/?)$ /foo/index.php?id=$1 [NC,QSA,L]

RewriteCond %HTTP_HOST !^www\.example\.com [NC]
RewriteRule ^/?(.*) http://www.example.com/$1 [L,R,NE]

.html 到 .php,我想要实现的目标,以及 example.com 到 www.example.com。

【问题讨论】:

【参考方案1】:

我在我的 httpd.conf 中使用它

<VirtualHost *:80>
    DocumentRoot "/var/www/"
    ServerName www.domain.com   
    ServerAlias www.domain.com
    <Directory /var/www/>
        #other directives
    </Directory>    
    <Directory /var/www/foo/>   
        RewriteEngine on
        RewriteCond %REQUEST_FILENAME !-f
        RewriteCond %REQUEST_FILENAME !-d 
        RewriteRule ^([a-z]+)(\/?)$ index.php?id=$1 [NC,QSA,L]
    </Directory>
</VirtualHost>

【讨论】:

你能给我看看你的 httpd.conf 吗?也许你有另一个覆盖这个的规则 我编辑了我的答案。不要在 ^/foo/([a-z-]*)(\/?)$ 中的“^”后添加“/” 您可能需要将 AllowOverride none 更改为 AllowOverride All 还是没有运气。 example.com/foo/bar 只是加载 example.com - 我正在编辑 httpd.conf 文件,而不是 .htaccess 所以 AllowOverride 应该无关紧要。 - 无论如何都试过了,也没有运气。 哦,那就用目录索引作为 foo 路径。看我的回答

以上是关于http.conf 将 example.com/foo/bar 重定向到 example.com/foo?id=bar的主要内容,如果未能解决你的问题,请参考以下文章

shuguo34 新http.conf配置

ngx_http_finalize_request的使用

ini http_to_https_nginx.conf

Nginx-HTTP之listen指令解析

如何在 mod_proxy 设置下引用 Apache 的 http.conf 中的环境变量

启用 httpd-vhosts.conf 后 WAMP 服务器未运行