【发布时间】:2012-01-10 11:31:11
【问题描述】:
最初,编写此代码是为了创建 "pretty" 网址。
使用下面的代码时,mod_rewrite 可以正常工作。
<Directory /var/www/vhosts/myurl.com/httpdocs>
Options Indexes FollowSymLinks
php_admin_flag engine on
php_admin_value open_basedir none
AllowOverride all
Order allow,deny
Allow from all
</Directory>
RewriteEngine on
RewriteCond %{HTTPS} !=off
RewriteCond %{LA-U:REQUEST_FILENAME} !-f
RewriteCond %{LA-U:REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteCond $1 ^(register|account|logout|profile|edit_profile).*$
RewriteRule ^/(.*)$ https://myurl.com/?get=$1
它接受任何匹配的 url,例如 https://myurl.com/register 并将其重写为 https://myurl.com/?get=register。在浏览器中找到并显示相应的页面。
但是,我希望将原始 url 传递给浏览器。为此,我将 [PT] Flag 添加到我的 RewriteRule 中,如下所示:
RewriteRule ^/(.*)$ https://myurl.com/?get=$1 [PT]
这让 https://myurl.com/register(与上述相同的 url)进入浏览器,但不再显示页面。相反,它返回以下错误:
Bad Request
Your browser sent a request that this server could not understand.
Client sent malformed Host header
相关信息:
操作系统: Linux
服务器: Apache
控制: Plesk
目录: /var/www/vhosts/myurl.com/conf
文件: vhost_ssl.conf
我搜索了多个论坛和文章均无济于事。
第 1 条: Making prettier URLs with mod_rewrite(包括使用 [PT] 标志)
有没有人知道这里发生了什么以及如何解决它?如何让 “pretty” 网址显示?
【问题讨论】:
-
根据我的阅读,您应该使用
R标志,而不是PT。 R 标志使浏览器重定向到另一个 url。 PT 标志很少有用,也不能做你想做的事。 -
您可以尝试将
PT更改为P(代理) -
感谢您的回复。尝试了
P和R标志。两者都没有改善情况。让我澄清一下问题。就重定向而言,该代码工作正常。但是,浏览器显示的是 ugly 网址:https://myurl.com/?get=$1。我需要它来显示原始 pretty urlhttps://myurl.com/register。我的研究表明PT Flag可以解决这个问题。它没有。相反,它破坏了代码。我会尝试添加一个链接。 -
您是否尝试将规则从
RewriteRule ^/(.*)$ https://myurl.com/?get=$1更改为RewriteRule ^/(.*)$ /?get=$1 [L]? -
你好乔恩。是的,也试过了。昨晚没睡好,但我终于找到了解决办法。感谢您的回复。请参阅下面的答案。
标签: .htaccess mod-rewrite friendly-url bad-request