1

最初,编写此代码是为了创建“漂亮”的url。

使用下面的代码时,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 传递给浏览器。为此,我在 RewriteRule 中添加了[PT] 标志,如下所示:

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 条: 使用 mod_rewrite 制作更漂亮的 URL(包括使用 [PT] 标志)

有没有人知道这里发生了什么以及如何解决它?如何让“漂亮”的网址显示?

4

1 回答 1

0

于是折腾了两天,终于解开了这个谜题。

首先,我通过将RewriteRule更改为:

RewriteRule ^/(.*)$ https://myurl.com/?get=$1 [P]

RewriteRule ^/(.*)$ https://myurl.com/index.php?get=$1

没有任何标志。

每当触发重写时,这都会产生无限循环。但我注意到循环在没有重定向 url 的情况下发生(保持'pretty url')。进步!

我决定简化代码。我从RewriteCond中删除了'LA-U:' ,如下所示:

RewriteCond %{LA-U:REQUEST_FILENAME} !-f
RewriteCond %{LA-U:REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

那成功了!感谢那些发表评论的人。希望这对将来的某人有所帮助。

于 2012-01-10T23:54:29.957 回答