.htaccess RewriteRule php-get参数

时间:2015-11-06 00:51:09

标签: php regex apache .htaccess mod-rewrite

我正在尝试将网址重定向到我的网站,但是我遇到了让它正常工作的问题..我已经阅读了文档并且我做了大量的研究,所以我相信我是现在允许寻求帮助。

我得到的“最接近”的正则表达式命令是..

Next

我想?

我想要的结果是:

(/\?page=)(.*) matches ?page=about
!(/\?page=) matches everything but /?page=

我尝试过很多不同的东西,老实说,我真的无法让最简单的事情发挥作用。至少我设法将我的访问者重定向到www.domain.com,这是一个进步,不幸的是我在网上发现了代码并且没有自己编写。

RewriteCond是否必要?

我的意思是......我甚至不明白为什么以下拒绝工作所以请赐教,解释我做错了什么以及如何解决我的问题。

domain.com/?page=home -> domain.com/home
domain.com/?page=about -> domain.com/about
domain.com/?page=contact -> domain.com/contact
domain.com/?page=guestbook -> domain.com/guestbook

3 个答案:

答案 0 :(得分:0)

在这里,对此进行了测试,似乎对我有用:

RewriteEngine On

#Redirect the url if loaded with page=A or B or C (testing values)
RewriteCond %{QUERY_STRING} page=(A|B|C) [NC]
RewriteRule (.*) /%1/? [R=301,L]

#might not be needed if you already have a solution for this
#rewrite the url to index if the file doesn't exist.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php?q=$1 [L,QSA]

答案 1 :(得分:0)

您可以在DOCUMENT_ROOT/.htaccess文件中使用此代码:

RewriteEngine On
RewriteBase /

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} /(?:index\.php)?\?page=([^\s&]+) [NC]
RewriteRule ^ %1? [R=302,L,NE]

# internal forward from pretty URL to actual one
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ ?page=$1 [L,QSA]

答案 2 :(得分:-1)

首先告诉htaccess你要尊重真实的文件和目录

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

然后使用像

这样的规则
RewriteRule ^home$ index.php?page=home&%{QUERY_STRING} [L]
RewriteRule ^about$ index.php?page=about&%{QUERY_STRING} [L]

等等。

&%{QUERY_STRING}仅当您最终打算传递其他网址参数时,例如/about?lag=en