【问题标题】:.htaccess Subdomain's Folder To QueryString.htaccess 子域的文件夹到 QueryString
【发布时间】:2012-05-19 15:01:00
【问题描述】:

我需要http://profiles.mysite.com/Me 来显示http://mysite.com/profile.php?user=Me 会显示的内容。

“我”会根据用户名而变化。它可以包含空格,并且不是真正的文件夹。

我不想更改地址栏中的 URL。

【问题讨论】:

    标签: .htaccess redirect query-string subdomain


    【解决方案1】:

    将以下代码放入 web 根目录的 .htaccess 文件中应该可以满足您的需求:

    RewriteCond %{HTTP_HOST} ^profiles.mysite.com
    RewriteRule ^(.*)$ mysite.com/profile.php?user=$1 [L]
    

    【讨论】:

    • 将 RewriteEngine On 放在 .htaccess 文件的顶部 - 当然要确保重写模块已加载到您的网络服务器中,并且命令 AllowOverrides All 是 conf 中网络目录指令的一部分文件。
    • 嗯 .. 听起来重写规则没有触发。可以添加日志规则吗?第 1 行:RewriteLog "/usr/local/apache/logs/rewrite.log" 第 2 行:RewriteLogLevel 4 当然将路径替换为日志文件的完整系统路径,确保它存在且可写。
    • 啊,在这种情况下,可能将其设置为 2 或 3,然后只需查看日志文件中某个请求的添加内容(如果可以,请执行 tail -f 或其他操作)
    • 嗯 .. 服务于 mysite.com 的目录中是否还有另一个 .htaccess 文件?另外,在我给你的规则后面加上“[L]”(不带引号,最后一个空格后的第二行)(编辑答案以反映这一点)
    【解决方案2】:
    1. 通过httpd.conf 启用 mod_rewrite 和 .htaccess
    2. 在您的httpd.conf 中启用 mod_proxy

    最后把这段代码放到你的.htaccessDOCUMENT_ROOT目录下

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d [OR]
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^ - [L]
    
    RewriteRule ^([^\s]+)\s([^\s]+)(\s.*)?$ $1+$2$3 [L]
    RewriteRule ^([^\s]+)\s $1 [L]
    
    RewriteCond %{HTTP_HOST} ^profiles\.mysite\.com$ [NC]
    RewriteRule ^(.*)$ http://mysite.com/profile.php?user=$1 [P,L,QSA]
    

    这个答案现在将支持 URI 中任何 # 个空格,因为它是基于递归的规则。换句话说,像这样的 URI:

    http://profiles.mysite.com/foo bar baz
    

    将被代理为:

    http://mysite.com/profile.php?user=foo+bar+baz
    

    虽然浏览器中的 URL 将保留:

    http://profiles.mysite.com/foo&20bar%20baz
    

    【讨论】:

    • 谢谢,但这会导致 URL 发生变化。
    • 这仅仅意味着 mod_proxy 模块没有加载到 httpd.conf 中。请注意,我使用的是标志 P 而不是标志 R。更多详情请看这里:httpd.apache.org/docs/2.0/mod/mod_rewrite.html
    • 实际上,它有效,但是当名称中有空格时,例如“profiles.mysite.com/User name”,它只会显示“用户”的配置文件,而忽略空格及其后面的所有内容。
    • 请检查处理用户名空格的编辑代码。请注意,它仅处理一个空格,例如user name 但不会处理 the user name
    • 我提供的答案将支持任意数量的空格,因为它是基于递归的规则。
    猜你喜欢
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2012-09-14
    • 2019-07-10
    • 1970-01-01
    • 2016-01-18
    相关资源
    最近更新 更多