Mod重写伪造目录的Htaccess

时间:2013-10-03 06:07:47

标签: php .htaccess mod-rewrite

我正在尝试创建虚假目录以将特定参数重定向到特定的子目录:

From: www.example.com/username
  To: www.example.com/posts?uid=alex

From: www.example.com/p/1234
  To: www.example.com/posts?url=1234

从堆栈溢出中的相同主题的其余问题来看,这是一个更复杂的例子,大多数答案都没有解释它是如何工作的,因此我无法得出如何解决这个问题的结论。 / p>

2 个答案:

答案 0 :(得分:3)

尝试:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^p/([^/]+)$ /posts?url=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ /posts?uid=$1 [L]

首先,您需要使所有链接看起来像这样:

www.example.com/username
www.example.com/p/1234

上述重写规则将与/p/1234(通过^p/([^/]+)$)和/username(通过^([^/]+)$)匹配,并在内部将其重写为/posts URI。请注意,这将更改浏览器位置栏中的URL,因为这是外部重定向。如果有人输入www.example.com/posts?uid=alex,则网址将保持不变。

答案 1 :(得分:1)

启用mod_rewrite.htaccesshttpd.conf,然后将此代码放入DOCUMENT_ROOT/.htaccess文件中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^p/([^/]+)/?$ /posts?url=$1 [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /posts?uid=$1 [L,QSA,NC]