我正在尝试使用mod_rewrite来更改网址的外观。我真的迷失了,可以使用一些帮助。首先,是否可以使用mod_rewrite来改变URL的“前端”并在内部保持相同?如果是这样,我将如何执行以下操作:
我有https://domain.com/live/page.php?id=x
“page”和“x”都是可变的,并希望将URL显示为
https://domain.com/page
如果可能的话,或者如果我需要id = x那么它可能是
https://domain.com/page/x/
但是我不知道我是否需要在URL中的某个地方拥有该ID。
请帮助我,因为我知道这是常见的事情,但我无法理解!
谢谢!
编辑:在anubhava的帮助下,我得到了这个工作。这次我将代码放入/ live /目录的.htaccess而不是根目录。现在页面正确地更改了URL,但是我仍然需要从原始页面加载服务器,所以新的URL给了我404.这是代码:RewriteEngine on
RewriteOptions inherit
RewriteCond %{THE_REQUEST} \s/+live/([^.]+)\.php\?([^=]+)=([^\s&]+) [NC]
RewriteRule ^ /%1/%2/%3? [R=302,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/?$ /live/$1.php?$2=$3 [L,QSA,NC]
编辑: 这是我目前的.htaccess文件
根:
RewriteEngine on
RewriteOptions inherit
RewriteCond %{HTTP_HOST} ^bidwaffle\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.bidwaffle\.com$
RewriteRule ^/?$ "https\:\/\/bidwaffle\.com\/live" [R=301,L]
并在root \ live \:
中# secure htaccess file
<Files .htaccess>
order allow,deny
deny from all
</Files>
# disable directory browsing
Options All -Indexes
# disable access to logs/template files
<Files ~ "\.(log|tpl)$">
order allow,deny
deny from all
</files>
RewriteCond %{THE_REQUEST} \s/+live/([^.]+)\.php\?([^=]+)=([^\s&]+) [NC]
RewriteRule ^ /%1/%2/%3? [R=302,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/?$ /live/$1.php?$2=$3 [L,QSA,NC]
网址更改正确但无法正确加载(真实网址的静默加载)。现在我看到第二部分的问题,它甚至可能看不到这个请求,因为/ live /不再是“漂亮的URL”,因此可能不会调用/live/.htaccess。我尝试将该部分放入root / .htaccess中,并且通过附加引用页面而不是%3来做同样奇怪的事情
答案 0 :(得分:1)
确定您的DOCUMENT_ROOT/live/.htaccess
文件中可以包含以下规则:
RewriteEngine On
RewriteBase /live/
RewriteCond %{THE_REQUEST} /([^.]+)\.php\?([^=]+)=([^\s&]+) [NC]
RewriteRule ^ /%1/%2/%3? [R=302,L]
root .htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?bidwaffle\.com$
RewriteRule ^/?$ https://bidwaffle.com/live/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /live/$1.php?$2=$3 [L,QSA,NC]
答案 1 :(得分:-1)
我认为你已经倒退了。来自访问者(以及您网页上的链接)的传入 URI是SEO(漂亮)形式:/page/x
。 .htaccess的工作是将漂亮的表单转换为真正的“动态”形式:/live/page.php?id=x
(其中页面和x都可以从SEO URI中提取)。 .htaccess不会修改传出 URI。