使用mod_rewrite使网址更漂亮

时间:2014-01-31 19:58:12

标签: php apache .htaccess mod-rewrite rewrite

我正在尝试使用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来做同样奇怪的事情

2 个答案:

答案 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。